TL; DR: Wenn sich ein Array von Zeichen und ein Roboter an einer Startposition des Arrays befinden, schreiben Sie einen Algorithmus, der eine Zeichenfolge mit Bewegungen lesen kann (
F
für "Vorwärts",R
für "90 Grad nach rechts drehen" undL
für "90 Grad drehen") left ") und berechnen Sie die Endposition des Roboters. Weitere Details im vollständigen Text.
Wir haben zu Hause ein sehr einfaches programmierbares Gerät für Kinder: ein kleines Fahrzeug mit Knöpfen, mit denen das Fahrzeug vorwärts, um 90 Grad nach links oder um 90 Grad nach rechts gedreht werden kann. Ähnliches:
Wir haben auch eine Schaumstoffmatte mit folgenden Buchstaben:
Ziel ist es, den Kindern das Alphabet und die Grundlagen des Programmierens auf einmal beizubringen.
Die Herausforderung
Angenommen, wir haben unsere Schaumstoffmatte wie folgt zufällig angeordnet:
+---+---+---+---+---+---+---+
| E | R | L | B | I | X | N |
+---+---+---+---+---+---+---+
| O | A | Q | Y | C | T | G |
+---+---+---+---+---+---+---+
| F | W | H | P | D | Z | S |
+---+---+---+---+---+---+---+
| K | V | U | M | J |
+---+---+---+---+---+
| |
+---+
Nehmen wir an, wir haben das Fahrzeug so modifiziert, dass das Fahrzeug beim Programmieren eines "Vorwärts" -Befehls genau die Größe eines Quadrats auf der Matte vorwärts fährt. Wenn sich das Fahrzeug also auf dem U
Platz befindet und nach Norden fährt, hält es genau auf dem P
Platz an.
Alle Anweisungen werden dem Fahrzeug gegeben, bevor es sich in Bewegung setzt. Dies sind:
F
: Das Fahrzeug fährt geradeaus auf den nächsten Platz.R
: Das Fahrzeug dreht sich an seiner Stelle um 90 Grad nach rechts (keine weitere Bewegung).L
: Das Fahrzeug dreht sich an seiner Stelle um 90 Grad nach links (keine weitere Bewegung).
Sobald die Anweisungen erteilt wurden, können Sie die Taste "GO" drücken und das Fahrzeug an eine bestimmte Position schicken, da alle Anweisungen in der angegebenen Reihenfolge befolgt werden. So können Sie dem Kind sagen, dass es die erforderlichen Anweisungen für das Fahrzeug eingeben soll, um zu einem bestimmten Brief zu gelangen.
Sie müssen das kürzeste Programm / die kürzeste Funktion, die einen string
(Eingabeparameter) verarbeitet, mit einer Reihe von Anweisungen schreiben und den Buchstaben berechnen, bei dem das Fahrzeug stehen bleibt (Ausgabe string
).
Einzelheiten:
- Das Fahrzeug startet immer auf dem leeren Feld unten und zeigt nach Norden (in Richtung des
U
Feldes). - Die Eingabezeichenfolge enthält nur die Buchstaben
F
,R
,L
undG
(für die „Go“ -Taste). Sie können für die Matte und die Anweisungen auch Kleinbuchstaben verwenden, wenn Sie dies bevorzugen. - Der Algorithmus muss jede Anweisung in der Zeichenfolge vor der ersten befolgen
G
(jede Anweisung danach wird ignoriert, wenn sich das Fahrzeug in Bewegung gesetzt hat). - Wenn das Fahrzeug zu einem bestimmten Zeitpunkt die Matte verlässt (auch wenn die Eingabezeichenfolge nicht vollständig verarbeitet wurde), muss der Algorithmus die Zeichenfolge zurückgeben
Out of mat
. - Wenn nicht, muss der Algorithmus den Brief zurückgeben, bei dem das Fahrzeug stehen geblieben ist. Der Startpunkt zählt als ein
Zeichen (oder eine leere Zeichenfolge).
Beispiele:
Input: FFG
Output: P
Input: FRFRFG
Output: Out of mat
Input: RRFFG
Output: Out of mat
Input: FFFRFFLFG
Output: X
Input: FFFRFFLF
Output: <-- Nothing or a whitespace (the robot has not started moving)
Input: FFFRRFFFG
Output: <-- Nothing or a whitespace (the robot has returned to the starting point)
Input: RRRRRLFFFLFFRFRFGFFRRGRFF
Output: L (Everything after the first G is ignored)
Das ist Code-Golf , also kann das kürzeste Programm für jede Sprache gewinnen!
quelle
@
wobei die Startposition und die Leerzeichen außerhalb der Matte liegen, also wäre diese KonfigurationERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(mit unterschiedlichem Abstand, SE hat sie durcheinander gebracht)Antworten:
JavaScript (ES6),
194176169163 BytesDank @Luke und @Arnauld wurden einige Bytes gespeichert.
Ungolfed:
quelle
false
durch!1
every
Methode dies.(s,p=35,d=3,t='ERLBIXN1OAQYCTG1FWHPDZS11KVUMJ11111 11')=>[...s].every(i=>i=='L'?d--:i=='R'?d++:i=='F'?+t[p+=[1,8,-1,-8][d%4]]||!t[p]?p=1/0:1:0)?'':t[p]||'Out of mat'
[1,8,-1,-8]
Array, danke!Python 2 , 235 Bytes
Probieren Sie es online!
quelle
Python 3 ,
226231241 BytesZweite Bearbeitung; sollte jetzt funktionieren. Auch hier muss noch viel optimiert werden.
Probieren Sie es online!
quelle
Wolfram Language / Mathematica, 300 Bytes
Ungolfed:
quelle