TL; DR: Dada una matriz de caracteres y un robot en una posición inicial de la matriz, escriba un algoritmo que pueda leer una cadena con movimientos (
F
para "avanzar",R
para "girar 90 grados a la derecha" yL
para "girar 90 grados izquierda ") y calcular la posición final del robot. Más detalles en el texto completo.
Tenemos en casa un dispositivo programable muy simple para niños: un pequeño vehículo con botones para que el vehículo avance, gire 90 grados a la izquierda o gire 90 grados a la derecha. Algo similar a esto:
También tenemos una alfombra de espuma con letras como esta:
El propósito de todo esto es enseñar a los niños el alfabeto y los rudimentos de la programación, todo a la vez.
El reto
Supongamos que hemos dispuesto al azar nuestra alfombra de espuma de esta manera:
+---+---+---+---+---+---+---+
| 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 |
+---+---+---+---+---+
| |
+---+
Supongamos que también hemos modificado el vehículo para que cuando programemos un comando de "avance", el vehículo avance exactamente el tamaño de un cuadrado en el tapete. Entonces, si el vehículo está en la U
plaza y va hacia el norte, se detiene exactamente en la P
plaza.
Todas las instrucciones se dan al vehículo antes de que comience a moverse, y son:
F
: El vehículo avanza hacia la siguiente casilla.R
: El vehículo gira 90 grados a la derecha en su lugar (sin movimiento adicional).L
: El vehículo gira 90 grados a la izquierda en su lugar (sin movimiento adicional).
Una vez que se dan las instrucciones, puede presionar el botón "IR" y enviar el vehículo a una posición dada, ya que seguirá todas las instrucciones en el orden dado. Entonces, puede decirle al niño que inserte las instrucciones necesarias para que el vehículo vaya a una letra determinada.
Debe escribir el programa / función más corto que procesa un string
(parámetro de entrada) con un conjunto de instrucciones y calcula la letra sobre la que se detiene el vehículo (salida string
).
Detalles:
- El vehículo siempre comienza en el cuadrado en blanco en la parte inferior y mirando hacia el norte (hacia el
U
cuadrado). - La cadena de entrada contendrá sólo las letras
F
,R
,L
yG
(para el botón "ir"). Puede usar letras minúsculas para el tapete y las instrucciones, si así lo prefiere. - El algoritmo debe obedecer todas las instrucciones de la cadena antes de la primera
G
(cada instrucción posterior se ignora cuando el vehículo ha comenzado a moverse). - Si el vehículo se sale del tapete en un momento dado (incluso si la cadena de entrada no se ha procesado completamente), el algoritmo debe devolver la cadena
Out of mat
. - De lo contrario, el algoritmo debe devolver la letra que el vehículo ha detenido. El punto de partida cuenta como un
carácter (o una cadena vacía).
Ejemplos:
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)
Este es el código de golf , ¡así que puede ganar el programa más corto para cada idioma!
fuente
@
la posición inicial y los espacios fuera del tapete, por lo que esta configuración seríaERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(con un espaciado diferente, SE lo estropeó)Respuestas:
JavaScript (ES6),
194176169163 bytesAhorré algunos bytes gracias a @Luke y @Arnauld.
Sin golf:
fuente
false
con!1
every
método lo maneja.(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]
matriz, ¡gracias!Python 2 , 235 bytes
Pruébalo en línea!
fuente
Python 3 ,
226231241 bytesSegunda edición Debería funcionar ahora. Nuevamente, mucha optimización por hacer.
Pruébalo en línea!
fuente
Wolfram Language / Mathematica, 300 Bytes
Sin golf:
fuente