Auf Anraten von Frau Pac-Man, die besorgt ist, dass er übergewichtig wird, hat Pac-Man beschlossen, seinen täglichen Pac-Dot-Konsum im Auge zu behalten. Hilf ihm, die Anzahl der Pac-Dots auf einem bestimmten Pfad im Labyrinth zu zählen!
Das Labyrinth
Um Ihnen bei der Erstellung Ihrer eigenen Codierung des Labyrinths zu helfen, können Sie hier einige Rohdaten abrufen .
Pac-Man's Reise
Im Rahmen dieser Herausforderung gelten folgende Regeln:
- Erstens die gute Nachricht: Die Geister sind nicht da.
- Pac-Man startet sein Rennen immer an der auf dem obigen Bild angegebenen Position in Richtung Osten. An der Startposition befindet sich kein Pac-Dot.
- Solange er einem geraden Weg folgt, rückt er immer weiter auf die nächsten Plätze vor.
- Wenn er auf eine 90 ° -Drehung trifft, ohne dass ein anderer Weg verfügbar ist (orangefarbene Quadrate auf der Karte), nimmt er die Drehung automatisch und systematisch vor.
- Wenn er auf eine Kreuzung stößt, an der mehrere Pfade zur Verfügung stehen (grüne Quadrate auf der Karte), kann er entweder in derselben Richtung weiterfahren (falls zutreffend) oder eine andere Richtung wählen (einschließlich einer Kehrtwende).
- Wenn Pac-Man einen der Ausgänge auf der linken oder rechten Seite des Labyrinths passiert, erscheint er sofort wieder auf der gegenüberliegenden Seite.
- Pac-Man frisst alle Pac-Dots auf dem Pfad, dem er folgt. Sobald ein Pac-Dot gegessen wurde, wird er aus dem Labyrinth entfernt.
Die Herausforderung
Eingang
Sie erhalten eine Zeichenfolge, die das Verhalten von Pac-Man an den Kreuzungen beschreibt, die er erreichen wird. Diese Zeichenfolge besteht aus folgenden Zeichen:
L
: 90 ° nach links drehenR
: 90 ° nach rechts drehenF
: vorwärts gehen (keine Richtungsänderung)B
: gehe rückwärts (mach eine Kehrtwende)
Wenn alle Zeichen verarbeitet wurden, stoppt Pac-Man an der nächsten Kreuzung, auf die er trifft.
Ausgabe
Sie müssen die Anzahl der Pac-Dots drucken oder ausgeben, die entlang des Eingabepfads verbraucht wurden.
Regeln
- Sie können ein vollständiges Programm oder eine Funktion schreiben.
- Sie können Eingaben entweder in Groß- oder Kleinbuchstaben als Zeichenfolge oder als Array von Zeichen vornehmen. Sie können auch andere Zeichen (aber nur ein Zeichen pro Richtung) oder ganze Zahlen in verwenden
[0 .. 9]
. Wenn Sie dies tun, geben Sie dies bitte in Ihrer Antwort deutlich an. - Sie können davon ausgehen, dass die Eingabe immer gültig ist. (Das folgende jsFiddle erkennt Fehler, aber das solltest du nicht.)
- Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes.
- Standardlücken sind verboten.
Hinweis
Es ist möglicherweise weder erforderlich noch optimal, die genaue Form des Labyrinths zu speichern.
Testfälle und Demo
Die folgenden Testfälle - oder andere Eingaben - können in diesem jsFiddle getestet werden .
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!
quelle
Antworten:
Pyth,
356345 + 1 = 346 BytesDer Code enthält einige nicht druckbare Dateien. Hier ist also der umkehrbare
xxd
Hexdump.Benötigt das
-M
Flag, um die Speicherung zu deaktivieren. Leider kann dies in keinem mir bekannten Online-Testprogramm durchgeführt werden.Hier ist eine
lesbaredruckbare ASCII-Version:Erläuterung
Da an dieser Stelle noch sehr viel gearbeitet wird, werde ich noch keine vollständige Erklärung veröffentlichen.
Grundsätzlich stellt das Programm die Karte als (etwas seltsames) Diagramm mit fünf Nachschlagetabellen dar: 2 für die Konnektivität, 1 für die Verbindungsrichtung und 2 für die Punktzahl. Dies wurde durch ein Python-Skript mit 200 Zeilen erstellt, an dem ich viel zu viele Stunden gearbeitet habe. Dann geht das Programm einfach durch die Eingabe und zählt die Punkte, wobei die Punkttabellen auf Null aktualisiert werden, wenn die Punkte gesammelt werden.
MACHEN:
quelle
k, 264 Bytes
Hex-Dump:
Die Binärdaten am Ende codieren zwei Arrays:
a
besteht aus Bytepaaren, die jeweils (64 * Richtung) + junctionId darstellenb
ist die Anzahl der Pacman-Punkte zwischen jedem Knotenpaar ina
Das Programm liest seine eigene Quelldatei (
p.k
) und decodiert die Daten.Die Eingabe stammt von stdin und verwendet anstelle von FLBR 0x00,0x01,0x02,0x03 (auch bekannt als NUL, SOH, STX, ETX - die ersten vier ASCII-Codes).
Ich verwende meine eigene Implementierung von k, die im Vergleich zur Realität begrenzt, aufgebläht, unruhig und langsam ist . Ich teste mit folgendem Programm:
quelle