To jest „labirynt strzałkowy”:
v <
> v
> ^
> v
^ < *
Te *
znaki w miejscu, gdzie można zakończyć. Twoim celem jest znalezienie miejsca, w którym zaczyna się labirynt (stąd labirynt odwrócony). W tym przypadku jest to pierwszy >
w drugiej linii.
v------<
S-+---v |
| >--^
>-+-------v
^ < *
Pamiętaj, że należy użyć wszystkich strzałek. Pamiętaj również, że możesz założyć, że linie zostaną wypełnione spacjami do równej długości.
Twój program musi wprowadzić labirynt w dowolny rozsądny sposób (standardowe, z pliku, okna komunikatu itp.), Jednak labirynt musi być całkowicie nienaruszony. Na przykład nie można wprowadzić wierszy oddzielonych przecinkami; wejście musi być dokładnie labiryntem.
Musisz wyprowadzić początek labiryntu w dowolny rozsądny sposób. Na przykład możesz
- wyprowadzić współrzędne początku
- wypisz cały labirynt ze strzałką początkową zastąpioną przez
S
- wypisuje cały labirynt ze usuniętymi wszystkimi strzałkami oprócz strzałki początkowej (białe znaki nienaruszone!)
- itp.
Tak długo, jak na podstawie danych wyjściowych można stwierdzić, która strzałka jest strzałką początkową, jest w porządku. Na przykład wyjście
"0"
"2"
jest w porządku, bez względu na nowe wiersze i cytaty, ponieważ nadal możesz powiedzieć, gdzie był początek.
To jest code-golf , więc wygra najkrótszy kod w bajtach.
>v^
>
v
^
Odpowiedzi:
GolfScript, 55 bajtów
Demo online
Zakłada, że wszystkie linie wejściowe są wypełnione spacjami na tej samej długości i oddzielone znakami nowej linii. Zwraca bajtowe przesunięcie początkowej strzałki od początku ciągu wejściowego (np.
12
Dla przykładowego labiryntu w wyzwaniu).W szczególności ten program znajduje przesunięcia bajtów wszystkich strzałek, do których nie prowadzi żadna inna strzałka (zakładając, że wszystkie strzałki wskazują na strzałkę lub cel; może wystąpić dziwne zachowanie, jeśli nie jest to prawda). Domyślnie, jeśli istnieje kilka takich strzałek (które zgodnie ze specyfikacją nie powinny być możliwe przy prawidłowym wprowadzeniu), ich przesunięcia zostaną po prostu połączone w danych wyjściowych. Jeśli chcesz, możesz dołączyć
n*
do programu, aby zamiast tego były oddzielone znakami nowej linii.Wersja bez golfa z komentarzami:
źródło
w
.z
aby&
uniknąć potrzeby dodatkowego miejsca. OTOH,?~.~)
robi całkiem ładną buźkę. :-)GolfScript (
101100 bajtów)Dane wyjściowe mają postać, w
[[x y]]
której współrzędne są oparte na 0.Demo online
Przetwarzanie odbywa się w dwóch fazach: pierwsza faza zamienia labirynt w szereg
[x y dx dy]
krotek; druga faza odwzorowuje każdą strzałkę / gwiazdkę na strzałkę / gwiazdkę, na którą wskazuje. (Uważa się, że gwiazdki wskazują na siebie). Według definicji problemu istnieje dokładnie jedna strzałka, która nie jest wynikiem tej mapy, i to jest rozwiązanie.źródło
;'STUFF'
symuluje dostarczanieSTUFF
przez stdin.Mathematica
491323Niegolfowany z komentarzami
Procedura rozpoczyna się od końca („*”), znajduje strzałkę do niej wskazującą i tak dalej, aż do początku.
Funkcja f [labirynt].
precursor [{Flatten [{aboveMe [loc, a], belowMe [loc, a], rightOfMe [loc, a], leftOfMe [loc, a]}, 2], a, Prepend [list, loc]}]]
Grał w golfa
Przykład
Labirynt. Każda uporządkowana para zawiera wiersz i kolumnę komórki. Np. {2, 3} oznacza komórkę w wierszu 2, kolumnie 3.
Wejście
Wyjście : ścieżka od początku do końca.
źródło
Wydaje mi się, że znalazłem dobry sposób na rozwiązanie tego problemu, ale zdarzyło mi się ssać golfa. Myślę, że może to być DROGA krótsza, więc wyjaśnię mój pomysł, aby inni mogli go wykorzystać, jeśli uznają go za dobry.
Jeśli każda strzała musi być użyta, wszystkie strzałki będą wskazywane przez inną strzałkę, z wyjątkiem jednej, to jest nasze rozwiązanie.
Oznacza to, że tak naprawdę nie musimy grać w labirynt do tyłu, ale zaczynając od lewego górnego rogu, musimy po prostu sprawdzić najbliższą wskazaną strzałkę dla każdego z nich. To prawdziwy ból dla większych labiryntów (ponieważ nie musisz sprawdzać wszystkich czterech kierunków, ale tylko jeden).
Oto moje rozwiązanie:
PHP, 622 bajty
Nie golfowany:
źródło
PHP - 492 bajtów
To rozwiązanie zakłada, że mapę można znaleźć w zmiennej lokalnej
$m
. Najkrótsza metoda, jaką mam do przekazania, to$_GET
:$m=$_GET['m'];
14 bajtów. Wersja bez golfa z mapą w zmiennej znajduje się poniżej dla przejrzystości odczytu.źródło
K,
281277258Oto wcześniejsza, nie golfowa wersja
Zwraca punkt początkowy, jak w
x y
przypadku indeksów opartych na 0.źródło
Python 422
Dane wejściowe znajdują się w pliku o nazwie
m.txt
. Dane wyjściowe są,(x, y)
ale jeśli zmienisz ostatnią instrukcję drukowania naprint g
, wynik będzie listą, podobnie jak[(x, y), (x, y), ...]
wszystkie kroki, które należy wykonać od końca do początku.źródło