Węże wyglądają tak:
>>>v
@ ^ v
^ >>>^ v
^ v
^<<<<<<<<<
Wąż może się przeciąć, tak jak w tym przypadku:
@
^
>^>v
^<<
Aby crossover był ważny, postacie po obu stronach muszą poruszać się w tym samym kierunku. Sprawa
@
>^v
^<
można uznać za niejasne i nieważne.
Dane wyjściowe to ciąg WASD
reprezentujący przejście od głowy do ogona ( @
).
Biorąc pod uwagę węża, który nie cofa się i nie jest dwuznaczny, czy możesz napisać program, który wyświetli ciąg ruchów wykonywanych przez węża?
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź!
Przypadki testowe:
(Uwaga: @
Można je zastąpić dowolną postacią spoza v^<>
)
Wejście:
>>>>v
v
v<< @
v ^
>>>>>^
Wynik: ddddssaassdddddww
Wejście:
@>>v
^ v
^ v
^<<<
Wynik: dddsssaaawww
Wejście:
>>>v
v @
v ^
>>>>v ^
>>>>^
Wynik: dddsssddddsddddwww
Wejście:
@<< v
^ v
v<^<<
v ^
>>^
Wynik: ssaaaassddwwwwaa
Wejście:
@v<v
^v^v
^v^<
^<
Wynik: ssawwasssawww
Odpowiedzi:
Jawa,
626539536529 bajtów-87 bajtów, zapisując kilka w wielu miejscach. Dziękuję Panu Publicowi za zwrócenie uwagi.
-3 bajty, ponieważ nie mogę usunąć wszystkich spacji za pierwszym razem (dzięki mbomb007)
+8 bajtów do naprawienia w tym przypadku:
-15 bajtów według deklaracji zmiennej ładowanej od przodu
Wersja do odczytu:
Ma ciąg jak
v @\n>>>^
. Tworzy ścieżkę zaczynając od każdej współrzędnej, a następnie zwraca najdłuższą. Najtrudniejsze było oczekiwanie na nakładające się ścieżki.źródło
Ruby, 217
Zaczyna się od
@
i idzie do tyłu, szukając sąsiadów wskazujących aktualną pozycję (z
). Aby wybrać właściwą drogę na skrzyżowaniach czterokierunkowych, faworyzuje sąsiadów wskazujących ten sam kierunek (max_by{...}
). Jeśli nie zostaną znalezieni najbliżsi sąsiedzi, zakłada się, że musiała istnieć zwrotnica i osiąga jeden poziom na raz, aż znajdzie jednego (until n
ic+=1
). Ten proces powtarza się dla liczby segmentów ciała (bez głowy) (.scan(/\w/){...}
).Przypadek testowy, który dodałem do układanki, wciąż mnie potykał, więc przeszedłem z 182 znaków na 218. Wszystkie te dodatkowe postacie upewniały się, że moje ruchy poziome nie przechodzą do następnych / poprzednich linii. Zastanawiam się, czy mogę sobie z tym poradzić w lepszy sposób.
Nie golfowany:
źródło