TL; DR: étant donné un tableau de caractères et un robot dans une position de départ du tableau, écrivez un algorithme qui peut lire une chaîne avec des mouvements (
F
pour "aller de l'avant",R
pour "tourner de 90 degrés à droite" etL
pour "tourner de 90 degrés" gauche ") et calculer la position finale du robot. Plus de détails dans le texte complet.
Nous avons chez nous un appareil programmable très simple pour les enfants: un petit véhicule avec des boutons pour faire avancer le véhicule, tourner à 90 degrés à gauche ou à 90 degrés à droite. Quelque chose de similaire à ceci:
Nous avons également un tapis en mousse avec des lettres comme celle-ci:
Le but de tout cela est d'enseigner aux enfants à la fois l'alphabet et les rudiments de la programmation.
Le défi
Supposons que nous ayons disposé notre tapis en mousse de façon aléatoire:
+---+---+---+---+---+---+---+
| 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 |
+---+---+---+---+---+
| |
+---+
Supposons également que nous ayons modifié le véhicule de sorte que lorsque nous programmons une commande "aller de l'avant", le véhicule avance exactement de la taille d'un carré dans le tapis. Donc, si le véhicule est sur la U
place et va vers le nord, il s'arrête exactement sur la P
place.
Les instructions sont toutes données au véhicule avant qu'il ne commence à se déplacer, à savoir:
F
: Le véhicule avance dans la case suivante.R
: Le véhicule tourne à 90 degrés à sa place (pas de mouvement supplémentaire).L
: Le véhicule tourne à 90 degrés à gauche à sa place (pas de mouvement supplémentaire).
Une fois les instructions données, vous pouvez appuyer sur le bouton "GO" et envoyer le véhicule à une position donnée car il suivra toutes les instructions dans l'ordre donné. Ainsi, vous pouvez dire à l'enfant d'insérer les instructions nécessaires pour que le véhicule se rende à une lettre donnée.
Vous devez écrire le programme / la fonction la plus courte qui traite un string
(paramètre d'entrée) avec un ensemble d'instructions et calcule la lettre sur laquelle le véhicule s'arrête (sortie string
).
Détails:
- Le véhicule démarre toujours au carré blanc en bas, et face au nord (vers le
U
carré). - La chaîne d'entrée ne contiendra que les lettres
F
,R
,L
etG
(pour le bouton « go »). Vous pouvez utiliser des lettres minuscules pour le tapis et les instructions, si vous préférez. - L'algorithme doit obéir à toutes les instructions de la chaîne avant la première
G
(chaque instruction suivante est ignorée car le véhicule a commencé à se déplacer). - Si le véhicule sort du tapis à un moment donné (même si la chaîne d'entrée n'a pas été complètement traitée), l'algorithme doit renvoyer la chaîne
Out of mat
. - Sinon, l'algorithme doit renvoyer la lettre où le véhicule s'est arrêté. Le point de départ compte comme un caractère
(ou une chaîne vide).
Exemples:
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)
C'est du golf de code , alors le programme le plus court pour chaque langue peut gagner!
la source
@
la position de départ et les espaces hors du tapis, donc cette configuration seraitERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(avec un espacement différent, SE l'a gâché)Réponses:
JavaScript (ES6),
194176169 169163 octetsEnregistré quelques octets grâce à @Luke et @Arnauld.
Non golfé:
la source
false
par!1
every
méthode le gère.(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]
tableau, merci!Python 2 , 235 octets
Essayez-le en ligne!
la source
Python 3 ,
226231241 octetsDeuxième montage; devrait fonctionner maintenant. Encore une fois, beaucoup d'optimisation à faire.
Essayez-le en ligne!
la source
Wolfram Language / Mathematica, 300 octets
Non golfé:
la source