Algunos `` me gusta '' basados en texto no te permiten caminar hacia las paredes y te permiten retroceder si lo intentas. ¿Por qué hacer eso cuando puedes hacer que el jugador se mueva en la dirección válida más cercana?
El reto
Escriba un programa de función que, dada una dirección y una cuadrícula de caracteres de 3 por 3, genere la misma cuadrícula después de que el jugador haya dado un paso.
Por ejemplo,
9
#..
.@#
#.#
se convierte
#.@
..#
#.#
Entrada
La dirección viene dada por un solo dígito del 1 al 9, cada uno correspondiente a 8 direcciones cardinales y detenido. Esto se deriva de las ubicaciones relativas de los números en un teclado:
NW N NE .. \ | / / ... 7 8 9 W- 4 5 6 -E ... 1 2 3 ../ | \ SW S SE
Sin embargo, también puede usar los números 123, 456, 789 en lugar de 789, 456, 123. En otras palabras, puede intercambiar las 2 filas o números superiores e inferiores si así lo desea. Estas son las únicas 2 combinaciones de índice aceptables.La cuadrícula de 3 por 3 constará de 3 caracteres ASCII distintos e imprimibles que representan el piso, las paredes y el jugador que se pueden caminar. (En los casos de prueba,
.
se usa para piso,#
s son paredes y@
es el jugador)- Puede elegir qué caracteres usa su programa, pero debe indicarlos en su respuesta y deben ser consistentes en varias pruebas.
- El personaje que representa al personaje siempre estará en el medio de la cuadrícula de 3 por 3, y la dirección siempre estará entre 1 y 9 (incl.)
- Puede tomar entrada en cualquier orden
- La cuadrícula de 3 por 3 se puede ingresar como una matriz de caracteres, una matriz de cadenas, una cadena de 9 longitudes u otra alternativa razonable.
Salida
- Regresar de una función o salida a StdOut o la alternativa más cercana
- Se permiten espacios finales y líneas nuevas
- Debe usar las mismas representaciones de caracteres que la entrada
- Los mismos formatos permitidos para entradas están permitidos para salidas
Cómo se mueve el jugador
Si la dirección especificada está bloqueada por un muro (por ejemplo, si el ejemplo anterior tenía la dirección 6), mire las 2 direcciones más cercanas:
- Si una (y solo una) dirección es libre, mueva al jugador en esa dirección.
- Si no hay direcciones libres, mira las siguientes 2 direcciones más cercanas (excluyendo la dirección 5). Si has dado la vuelta y no has encontrado una dirección abierta (jugador rodeado de paredes), no muevas al jugador
- Si ambas direcciones están abiertas, elija una para moverse al azar (aunque no necesariamente de manera uniforme).
Si la dirección dada es un 5, no muevas al jugador
Casos de prueba
( #
= pared, .
= piso, @
= jugador)
Entrada: 9 9 # .. . @ # #. # Salida: #. @ .. # #. # Entrada: 3 # .. . @ # #. # Salida: # .. .. # # @ # Entrada: 7 7 ##. # @ # .. # Salida: ## @ ##. #. # o #. # .. # @. # Entrada: 5 5 ... . @. ... Salida: ... . @. ... Entrada: 2 ### # @ # ### Salida: ### # @ # ###
Puntuación
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
123;456;789
lugar de 789;456;123
?
yuhjklbn
? Q.E.P.D.