Pozwala zdefiniować niepustą, nieposortowaną i skończoną macierz z unikatowymi liczbami w następujący sposób:
Pozwala zdefiniować 4 ruchy macierzy jako:
- ↑ * (w górę): Przesuwa kolumnę w górę
- ↓ * (w dół): Przesuwa kolumnę w dół
- → * (w prawo): Przesuwa rząd w prawo
- ← * (po lewej): Przesuwa rząd w lewo
Gwiazdka (*) reprezentuje kolumnę / wiersz, na które ma wpływ ruch (może być indeksowany 0 lub indeksowany 1. Do Ciebie. Podaj, który z nich w odpowiedzi).
Wyzwaniem jest, używając powyższych ruchów, posortować macierz w porządku rosnącym (będąc lewym górnym rogiem najniższym i prawym dolnym rogiem najwyższym).
Przykład
↑0
↓0
→0
↑0↑1←1↑2
↑0↑2→0→2↑0→2↑1↑2←1
↑2↑1←3→0←3↓0←0←2→3↑3↑4
Notatki
- Mogą istnieć różne prawidłowe dane wyjściowe (niekoniecznie muszą być takie same jak przypadki testowe lub najkrótsze)
- Możesz założyć, że zawsze będzie to sposób na uporządkowanie matrycy
- Krawędzie łączą się (jak pacman: v)
- Nie będzie matrycy z więcej niż 9 kolumnami i / lub rzędami
- Załóżmy, że macierz zawiera tylko dodatnie niezerowe liczby całkowite
- Możesz użyć dowolnych 4 odrębnych wartości innych niż liczby do przedstawienia ruchów (w takim przypadku proszę podać to w odpowiedzi)
- Kolumna / wiersz może być indeksowany 0 lub 1
- Kryteria wygrywania w golfa kodowego
Dodatkowe przypadki testowe są zawsze mile widziane
←0←0
poprawnym rozwiązaniem dla drugiego przykładu, w którym podano rozwiązanie jako→0
. Jeśli tak, myślę, że połowa opcji ruchu prawdopodobnie nie zostanie użyta.Odpowiedzi:
JavaScript (ES6),
226219 bajtówWyszukiwanie z użyciem siły brutalnej za pomocą ruchów w prawo (
"R"
) i w dół ("D"
).Zwraca albo łańcuch opisujący ruchy, albo pustą tablicę, jeśli macierz wejściowa jest już posortowana. Kolumny i wiersze w danych wyjściowych mają indeks 0.
Wypróbuj online!
Skomentował
źródło
Python 2 , 296 277 245Python 3 ,200194 bajtówWypróbuj online!
-19: strzały unicode nie były wymagane ...
-32: nieco przerobione, ale średnio znacznie wolniejsze działanie.
-45: czerpałem inspirację z odpowiedzi @ Arnauld. Przełączono na Python 3 dla
f''
(-4 bajtów)-6:
range( )
→r_[: ]
,diff(ravel( ))
→ediff1d( )
Wyczerpująco wyszukuje kombinacje wszystkich możliwych
↓
ruchów i→0
. Przekroczono limit czasu w trzecim przypadku testowym.Ponieważ
→n
jest to równoważne zgdzie
r
ic
są liczbami wierszy i kolumn, te ruchy są wystarczające, aby znaleźć każde rozwiązanie.>v
odpowiadają odpowiednio→↓
. (inne niezdefiniowane)źródło
Galaretka , 35 bajtów
Wypróbuj online!
Pełny program Wyjścia przesuwa się do STDOUT za pomocą L dla lewej i R dla prawej. Próbuje losowych ruchów, dopóki macierz nie zostanie posortowana, więc nie jest zbyt wydajna pod względem szybkości ani złożoności algorytmicznej.
źródło