Wielu z nas zna grę Tron. Kontrolujesz „lekki rower” umieszczony na siatce. Lekki rower zawsze porusza się do przodu (chociaż kontrolujesz kierunek) i pozostawia za sobą ślad. Jeśli wpadniesz na ślad, rozbijesz się!
Celem jest ustalenie, czy dana ścieżka jest prawidłową pętlą, tzn. Wraca do punktu początkowego bez „awarii”. Aby to zrobić, zakładamy, że zaczynamy od punktu (0,0)
. Dane wejściowe są podawane w postaci N2E1S2W1
szeregu kardynalnych kierunków ( N
jest north
, E
jest east
itd.), Po których następuje odległość do przebycia w tym kierunku. W tym przykładzie podróżowałbyś
N2 : North 2 to (0,2)
E1 : East 1 to (1,2)
S2 : South 2 to (1,0)
W1 : West 1 to (0,0)
Ścieżka jest uważana za ważną, jeśli kończy się na (0,0)
nie odwiedzając żadnej innej współrzędnej więcej niż raz (odwiedza (0,0)
dokładnie dwa razy. Raz na początku i raz na końcu). Pamiętaj, że w powyższym przykładzie, aby dostać się (0,0)
do (0,2)
, koniecznie odwiedź (0,1)
również.
Inne przykłady:
input -> output
N1E1S1W1 -> true
N1E1N1E1S2W2 -> true
N1S1E1W1 -> false // Visits (0,0) 3 times
N4E2S2W4S2E2 -> false // Visits (0,2) twice
N3E2S3 -> false // Does not return to (0,0)
N1S1 -> anything //I don't care how you evaluate this case
Twój wynik może być w dowolnej formie, pod warunkiem, że daje to samo wyjście dla dowolnej wartości prawdziwej lub falsey.
Dane wejściowe można traktować jako ciąg znaków lub listę znaków, w formie S1N2E3
... lub SNNEEE
... Nie ma również sztywnego limitu rozmiaru siatki, ale należy założyć, że dane wejściowe niczego nie przepełnią. Tak długo, jak kod jest zasadniczo poprawny, tak ważne jest, aby obsługiwać takie przypadki N99999999999999
.
UWAGA: Można oceniać przypadki N1S1
, E1W1
, S1N1
, a W1E1
jednak chciałbyś. Są to technicznie ważne ścieżki, ale są sprzeczne z duchem wyzwania „Tron”.
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź!
źródło
N1S1
powinna być zgodna z twoimi definicjami, ponieważ osiąga(0, 0)
dwa razy i(0, 1)
raz, co jest ważne w twojej definicji.N
jak1j
,E
jak1
,S
jak-1j
, iW
jak-1
?N99999999999999
Odpowiedzi:
Pyth ,
4439 bajtówZestaw testowy .
źródło
JavaScript,
247200 bajtówn
jest funkcją ciągu wejściowego,s
która zwraca wartość1
true i0
falseOto nieprzygotowana wersja dla odniesienia / objaśnienia:
źródło
contains
to, że nie jest to funkcja w żadnym dialekcie języka javascript. Czy możesz podać dialekt?Python 3 ,
236161150 bajtówWypróbuj online!
-75 bajtów dzięki Leaky Nun
-11 bajtów dzięki Leaky Nun Lub, jeśli wolno nam przyjmować dane wejściowe jako listę zdekodowanych liczb zespolonych:
Python 2 ,
8573 bajtówWypróbuj online!
-12 bajtów dzięki Mr. Xcoder / -9 bajtów dzięki Leaky Nun (połączone w jedną edycję)
To wydaje mi się zbyt długie, lol
źródło
Galaretka ,
1412 bajtówTo mój pierwszy raz w golfa w Jelly. Sugestie są mile widziane.
Dane wejściowe są w postaci tablicy
[direction, distance]
par, gdzie kierunek jest podany jako liczba zespolona.Wyjaśnienie:
źródło
Siatkówka , 86 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Konwertuj liczby na unary.
Długość przebiegu dekoduje litery.
N111
musi się zmienićNNN
, więc odejmuje się jeden od każdej liczby jednoargumentowej, a następnie każdy 1 powiela poprzednią literę.Wygeneruj wszystkie prefiksy (tj. Punkty na ścieżce) jako osobne linie. Spacja ma prefiks, aby uniknąć problemów z pustymi liniami.
Posortuj wszystkie litery w każdym wierszu w kolejności, a następnie usuń pasujące pary. W rezultacie otrzymujemy unikalny kod dla dowolnego punktu na siatce.
Sprawdź jedną z dwóch rzeczy: a) ostatni punkt nie kończy się spacją (tj. Pętla się nie zamyka) lub dwa zduplikowane punkty na ścieżce. Jeśli ścieżka jest poprawna, wszystkie testy kończą się niepowodzeniem, a wynik wynosi zero.
Odwróć wynik.
źródło
Perl, 140
Działa z ciągiem wejściowym. Być może mogę skrócić za pomocą tablicy, ale wątpię w to. Chętnie pomożemy w dalszej grze w golfa :)
źródło