Einige textbasierte Schurken-Likes lassen dich nicht in Wände laufen und geben dir den Weg zurück, wenn du es versuchst. Warum tun Sie das, wenn Sie den Spieler dazu bringen können, sich in die nächste gültige Richtung zu bewegen?
Die Herausforderung
Schreiben Sie ein Funktionsprogramm, das unter Angabe einer Richtung und eines 3 x 3-Zeichenrasters dasselbe Raster ausgibt, nachdem der Spieler einen Schritt ausgeführt hat.
Beispielsweise,
9
#..
.@#
#.#
wird
#.@
..#
#.#
Eingang
Die Richtung wird durch eine einzelne Ziffer von 1 bis 9 angegeben, die jeweils 8 Hauptrichtungen entsprechen und stillstehen. Dies ergibt sich aus den relativen Positionen der Zahlen auf einer Tastatur:
NW N NE .. \ | / ... 7 8 9 W-4 5 6 -E ... 1 2 3 ../ | \ SW S SE
Sie können jedoch auch die Nummern 123, 456, 789 anstelle von 789, 456, 123 verwenden. Mit anderen Worten, Sie können die oberen und unteren 2 Zeilen oder Nummern vertauschen, wenn Sie dies wünschen. Dies sind die einzigen 2 akzeptablen Indexkombinationen.Das 3 x 3-Raster besteht aus 3 verschiedenen druckbaren ASCII-Zeichen, die den begehbaren Boden, die Wände und den Player darstellen. (In den Testfällen
.
wird für Boden verwendet,#
s sind Wände und@
ist der Spieler)- Sie können wählen, welche Zeichen Ihr Programm verwendet, aber Sie müssen sie in Ihrer Antwort angeben und sie müssen über mehrere Versuche hinweg konsistent sein.
- Das Zeichen, das das Zeichen darstellt, befindet sich immer in der Mitte des 3 x 3-Gitters, und die Richtung liegt immer zwischen 1 und 9 (einschließlich).
- Sie können Eingaben in beliebiger Reihenfolge vornehmen
- Das 3 x 3-Raster kann als Zeichenfeld, Zeichenfolgenfeld, Zeichenfolge mit 9 Längen oder als andere sinnvolle Alternative eingegeben werden.
Ausgabe
- Von einer Funktion zurückkehren oder an StdOut oder die nächstgelegene Alternative ausgeben
- Leerzeichen und Zeilenumbrüche sind erlaubt
- Sie müssen die gleichen Zeichendarstellungen wie die Eingabe verwenden
- Dieselben für Eingaben zulässigen Formate sind für Ausgaben zulässig
Wie der Spieler sich bewegt
Wenn die angegebene Richtung durch eine Wand blockiert ist (z. B. wenn das obige Beispiel die Richtung 6 hatte), schauen Sie in die 2 nächstgelegenen Richtungen:
- Wenn eine (und nur eine) Richtung frei ist, bewegen Sie den Spieler in diese Richtung.
- Wenn keine Richtungen frei sind, schauen Sie sich die nächstgelegenen 2 Richtungen an (außer Richtung 5). Wenn Sie sich vollständig eingewickelt haben und keine offene Richtung gefunden haben (Spieler von Wänden umgeben), bewegen Sie den Spieler nicht
- Wenn beide Richtungen offen sind, wählen Sie eine aus, zu der Sie zufällig wechseln möchten (obwohl dies nicht unbedingt einheitlich ist).
Wenn die angegebene Richtung eine 5 ist, bewegen Sie den Player nicht
Testfälle
( #
= Wand, .
= Boden, @
= Spieler)
Eingang: 9 # .. . @ # #. # Ausgabe: #. @ .. # #. # Eingang: 3 # .. . @ # #. # Ausgabe: # .. .. # # @ # Eingang: 7 ##. # @ # .. # Ausgabe: ## @ ##. #.# oder #.# .. # @. # Eingang: 5 ... . @. ... Ausgabe: ... . @. ... Eingang: 2 ### # @ # ### Ausgabe: ### # @ # ###
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
123;456;789
anstelle von verwenden 789;456;123
?
yuhjklbn
? RUHE IN FRIEDEN.