Za radą pani Pac-Man, która martwi się, że ma nadwagę, Pac-Man postanowił śledzić swoje codzienne spożycie Pac-Dot. Pomóż mu policzyć liczbę Pac-Dots na danej ścieżce w labiryncie!
Labirynt
Aby pomóc Ci zbudować własne kodowanie labiryntu, możesz uzyskać tutaj surowe dane .
Podróż Pac-Mana
W kontekście tego wyzwania obowiązują następujące zasady:
- Po pierwsze, dobra wiadomość: duchów nie ma.
- Pac-Man zawsze rozpoczyna wyścig w miejscu wskazanym na powyższym obrazku, kierując się na wschód. W pozycji początkowej nie ma Pac-Dot.
- Tak długo, jak podąża prostą ścieżką, przechodzi do kolejnych pól.
- Kiedy napotka zwrot o 90 ° bez żadnej innej dostępnej ścieżki (pomarańczowe kwadraty na mapie), automatycznie i systematycznie wykonuje zwrot.
- Kiedy napotka skrzyżowanie, na którym dostępnych jest kilka ścieżek (zielone kwadraty na mapie), może albo iść w tym samym kierunku - jeśli dotyczy - lub wybrać inny kierunek (w tym zawracanie).
- Kiedy Pac-Man przechodzi przez jedno z wyjść w środkowej lewej lub środkowej prawej części labiryntu, natychmiast pojawia się po przeciwnej stronie.
- Pac-Man zjada wszystkie Pac-Dots na ścieżce, którą podąża. Po zjedzeniu Pac-Dot jest ono usuwane z labiryntu.
Wyzwanie
Wkład
Otrzymasz ciąg opisujący zachowanie Pac-Mana na skrzyżowaniach, do których dojdzie. Ciąg ten będzie się składał z następujących znaków:
L
: wykonaj obrót o 90 ° w lewoR
: wykonaj obrót o 90 ° w prawoF
: idź do przodu (bez zmiany kierunku)B
: cofnij się (zawróć)
Kiedy wszystkie postacie zostaną przetworzone, Pac-Man zatrzymuje się na następnym skrzyżowaniu, jakie napotka.
Wydajność
Musisz wydrukować lub wydrukować liczbę Pac-Dots zjedzonych wzdłuż ścieżki wejściowej.
Zasady
- Możesz napisać pełny program lub funkcję.
- Dane wejściowe można przyjmować wielkimi lub małymi literami, jako ciąg znaków lub tablicę znaków. Możesz także użyć innych znaków (ale tylko jeden znak na kierunek) lub liczb całkowitych w
[0 .. 9]
. Jeśli to zrobisz, podaj to wyraźnie w swojej odpowiedzi. - Możesz założyć, że dane wejściowe są zawsze prawidłowe. (JsFiddle poniżej wykryje błędy, ale nie powinieneś.)
- To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach.
- Standardowe luki są zabronione.
Wskazówka
Przechowywanie dokładnego kształtu labiryntu może nie być wymagane ani optymalne.
Przypadki testowe i demo
W tym jsFiddle można przetestować następujące przypadki testowe - lub dowolne inne dane wejściowe .
1. Input : ""
Output : 1
Comment: Pac-Man just advances to the first junction, eats the Pac-Dot on it and stops.
2. Input : "L"
Output : 7
3. Input : "FFR"
Output : 13
4. Input : "LFLR"
Output : 17
Comment: Pac-Man will exit on the middle right side and re-appear on the left side.
5. Input : "BBBB"
Output : 2
6. Input : "BRRFFFL"
Output : 15
7. Input : "LFFRLFFFFRF"
Output : 50
8. Input : "BRFRLRFRLFR"
Output : 54
Comment: Pac-Man will exit on the middle left side and re-appear on the right side.
9. Input : "FFLRLFFLLLLFFBFLFLRRRLRRFRFLRLFFFLFLLLLFRRFBRLLLFBLFFLBFRLLR"
Output : 244
Comment: All cleared!
źródło
Odpowiedzi:
Pyth,
356345 + 1 = 346 bajtówKod zawiera niektóre niedrukowalne elementy, więc oto odwracalny
xxd
zrzut heksowy.Wymaga
-M
flagi, aby wyłączyć zapamiętywanie. Niestety, nie można tego zrobić w żadnym internetowym executorze, którego znam.Oto
czytelnawersja ASCII do wydruku:Wyjaśnienie
To bardzo dużo pracy w toku, więc nie opublikuję jeszcze pełnego wyjaśnienia.
Zasadniczo program przedstawia tablicę jako (nieco dziwny) wykres przy użyciu pięciu tabel przeglądowych: 2 dla połączeń, 1 dla kierunków skrzyżowań i 2 dla liczby kropek. Został zbudowany przez 200-wierszowy skrypt Pythona, nad którym spędziłem zbyt wiele godzin. Następnie program po prostu przechodzi przez dane wejściowe i zlicza kropki, aktualizując tabele kropek do zera podczas zbierania kropek.
DO ZROBIENIA:
źródło
k, 264 bajtów
Zrzut szesnastkowy:
Dane binarne na końcu kodują dwie tablice:
a
składa się z par bajtów, każdy reprezentujący (kierunek 64 *) + junctionIdb
to liczba kropek Pacmana między każdą parą skrzyżowań wa
Program odczytuje własny plik źródłowy (
p.k
) i dekoduje dane.Dane wejściowe pochodzą ze standardowego wejścia i używają 0x00,0x01,0x02,0x03 (inaczej NUL, SOH, STX, ETX - pierwsze cztery kody ASCII) zamiast FLBR.
Używam własnej implementacji k, która jest ograniczona, rozdęta, awaria i powolna w porównaniu z rzeczywistością . Testuję za pomocą następującego programu:
źródło