Wyzwanie
Dałeś mapę znajomemu, który wygląda trochę tak:
|
/
|
/
|
\
|
\
D
Prosta mapa, która zaczyna się na górze, a kończy na dole. Niestety twój przyjaciel tego nie rozumie. Czy potrafisz odkodować mapę, aby mógł ją odczytać?
Wejście
Wejście jest ciągiem znaków składających się z |
, /
, \
, D
, ^
, Y
, (spacja) oraz nowej linii.
|
każe pozostać w tej samej kolumnie.\
każe przejść do kolumny po prawej i na dół 1./
każe przejść do kolumny po lewej i na dół 1.D
oznacza miejsce docelowe.^
(jeśli jest obecny) mówi o podziale na ścieżce.Y
(jeśli jest obecny) mówi o ponownym połączeniu ścieżek. Traktuj to jak|
.
Dane wejściowe zostaną ustawione tak, aby tworzyły rodzaj ścieżki:
|
|
\
|
^
/ \
/ |
D |
Zawsze będzie spacja między dwiema ścieżkami, a wszystkie ścieżki albo dołączą ponownie, albo dojdą do ostatniego wiersza wejścia. Będzie tylko jeden podział na mapę. Długość mapy wejściowej nie jest ograniczona. Nigdy nie będzie więcej niż dwie ścieżki.
Wynik
Dane wyjściowe powinny być ciągiem wskazówek.
- „ L ” powinien powiedzieć znajomemu, aby przesunął L eft i zrobił 1 krok do przodu.
- „ R ” należy poinformować swojego znajomego, aby przenieść R rawo i wziąć 1 krok do przodu.
- „ F ” powinien powiedzieć znajomemu, aby zrobił krok do przodu.
W przypadku przykładowej mapy wyników dane wyjściowe byłyby następujące:
F F L F R R R
Pamiętaj, że twój przyjaciel zaczyna na górze mapy i jest skierowany w dół mapy. Podaj wskazówki z jego perspektywy. W przypadku wystąpienia „^” program musi być w stanie wybrać ścieżkę prowadzącą do miejsca docelowego (D). Jeśli dwie ścieżki ponownie się połączą, twój program musi wybrać najprostszą ścieżkę (tę, która ma najwięcej |
s) do przejścia . Wskazówki muszą być oddzielone przestrzenie i musi kończyć się na D .
Przykłady
Wejście
|
|
\
\
^
/ |
| |
\ |
\ \
\ \
\ /
Y
D
Wynik
F F L L L F F F L L R F
Ponieważ skrajna lewa ścieżka zawiera tylko 1 |
, używamy skrajnej prawej ścieżki, która ma 3.
Wejście
\
|
/
|
\
|
/
D
Wynik
L F R F L F R
Wejście
/
\
/
\
^
\ \
D \
Wynik
R L R L R L
Inne szczegóły
- To jest golf golfowy, więc wygrywa osoba z najkrótszym kodem do następnej środy, 19 sierpnia.
- Konstruktywne opinie są mile widziane i bardzo mile widziane.
- Częściowo zainspirowany Mapą do ukrytego skarbu
- Zmień tytuł na bardziej kreatywny.
- Jeśli znajdziesz błędy, które popełniłem, popraw je.
- I oczywiście, baw się dobrze.
Dziękuję Ci!
Może trochę późno, ale UndefinedFunction jest zwycięzcą kodującym w JavaScript! Dziękuje wszystkim którzy dołączyli. Żadne inne wpisy nie będą akceptowane.
L L
, co moim zdaniem powinno byćL L L
. Przykład zY
nadal ma1
na końcu i wydaje się, że zawiera także inne błędy. Czytam mapę tak,F F R R R F F F R R L F
jakby poprawnie rozumiałem zasady.L
dla^
dwojga i dwaL
dla dwojga/
? I dlaczego dodałeś jeszcze dwaF
na końcuY
przykładu?Odpowiedzi:
JavaScript (ES6),
261248252248212 bajtówPonieważ musi być obsługiwany tylko jeden podział:
Jednak 240 bajtów i możemy poradzić sobie z wieloma podziałami:
Oba programy definiują anonimowe funkcje.
Aby użyć, nadaj funkcji nazwę, dodając
f=
przed kodem.Następnie można je wywołać za pomocą
Wyjaśnienie
(nieaktualne, ale wciąż ta sama koncepcja. Dla rozwiązania wielokrotnego podziału)
Notatki
Wszystkie ukośniki odwrotne (
\
) na wejściu są oznaczone jako „esc”\\
, aby javascript mógł je rozpoznać.Oba wyjścia zawierają końcowe spacje.
źródło
PHP,
634631607396382381347338330337324 bajtówMój pierwszy golf, więc bądź delikatny. Wszelkie wskazówki są mile widziane.
Krótkie wyjaśnienie:
Mam licznik, który wynosi 0, jeśli wejście ma tylko jedną ścieżkę. Po podzieleniu ścieżki liczba wynosi 1 dla lewej ścieżki i 2 dla prawej ścieżki. Po zdefiniowaniu obu ścieżek (lub tylko jednej) sprawdzam, która ścieżka ma więcej „F”.
Wersja bez golfa:
Log:
Zapisano 36 bajtów dzięki Kamehameha.
Zaoszczędzono wiele bajtów, zmieniając nieco logikę.
Zaoszczędzono 42 bajty dzięki axiac.
Zastąpiono każdą instrukcję if operatorami trójskładnikowymi.
źródło
$a=$b='';
zamiast -$a='';$b='';
Zapisuje około 3 bajtów.$a=$a.'L ';
Można również zredukować do rodzaju konkatenacji$a.='L '
. Wygląda na to, że zrobiłeś to w kilku miejscach. To pozwoli zaoszczędzić około 6 bajtów :)foreach($e as$i)
); Przetestowałem to i wydaje się, że działa dobrze.as
wforeach
, odstępach międzyecho
i nazwy zmiennej można usunąć, aby to zrobićecho$b
. Także kilka testów równości może być krótszy też$c==0
może być!$c
i czy to przypadek, można zainicjować$c
do''
z$a
a$b
!PHP, 281 bajtów
Jest to wynik dwóch iteracji golfowych. Wersja bez golfa to:
Sama gra w golfa i pojawiła się jako ulepszenie następującego programu gry w golfa (312 bajtów):
Jest to wersja oryginalna gry w golfa:
Przykładowe wykonanie:
Obsługuje również poprawnie wiele widelców (musisz dołączyć przed następnym widelcem, aby mieć maksymalnie dwie gałęzie w dowolnym momencie). Zapytałem o kilka rozwidleń w komentarzu, ale kod był już gotowy, gdy nadeszła odpowiedź („niepotrzebna”).
Pełny kod z pakietem testowym i więcej komentarzy można znaleźć na github .
źródło