Introducción
Todos saben que la posibilidad de navegar con éxito un campo de asteroides es de aproximadamente 3,720 a 1. Pero a pesar de su advertencia, Han Solo todavía está dispuesto a probar suerte.
Temiendo por su vida artificial, decide codificar, en el peculiar dialecto de la nave ( lea: su lenguaje preferido de Code Golf ), un programa de evitación de asteroides que decidirá qué camino tomar en un laberinto ASCII de campo de asteroides.
Entrada
El Millenium Falcon tiene un programa de mapeo de campo de asteroides, que proporciona datos similares a este:
| ##### ######### |
| ###### # ### # |
| # # # # #### # |
@ ## ####
|# # # ### ## |
|## ## #### # # |
|#### ##### # ## |
Las filas superiores quedan a la izquierda del Halcón, las filas inferiores están a la derecha del Halcón y las columnas representan lo que está frente al barco.
- Cada uno
#
es un obstáculo. - Cada espacio es un espacio vacío en el que la nave puede volar.
- La entrada siempre tiene 7 caracteres de altura. Este es el límite de ancho de mapeo de asteroides.
- La entrada siempre tiene 32 caracteres (30 para el campo en sí y 2 para los límites inicial y final). Este es el límite de profundidad de mapeo de asteroides. Las barras verticales
|
marcan el comienzo y el final de la asignación. @
Es el halcón. Siempre está en la fila central (cuarta fila) y la primera columna en la entrada.- El espacio que queda en las barras verticales en la última columna es el lugar al que debe llegar el barco. Siempre está en la fila central (cuarta fila) y la última columna en la entrada.
La entrada se puede tomar como una cadena de varias líneas, una matriz de cadenas, desde STDIN o parámetros de una función, o leer desde un archivo.
Posibles maniobras
Usted es perseguido por TIE-Fighters, por lo tanto, siempre debe avanzar. Por lo tanto, hay tres formas en que el barco puede volar en cada paso:
-
Adelante/
Adelante y gire a la izquierda\
Adelante y gire a la derecha
Por ejemplo, estas son rutas válidas:
@---
--
/ \ /
@ -
-
/ \
/ \
@ \
Como puede ver, siempre hay exactamente un movimiento por columna. El Halcón es un pedazo de basura, por lo tanto, no puede hacer giros violentos. Lo que significa movimientos como /\
o no\/
están permitidos . Debe haber al menos un puro hacia adelante -
entre dos turnos opuestos. Por otro lado, es posible girar en una dirección para varios pasos seguidos, como se ve arriba.
El Halcón se estrella si un movimiento lleva a la nave a un lugar donde hay un obstáculo. Por ejemplo, estos movimientos conducen a bloqueos:
@-#
@
\
#
#
/
@
Tenga en cuenta que esto no es un bloqueo:
@-#
\
-
Salida
Debe generar el mismo campo de asteroide ASCII, con una ruta válida hasta el final. El Falcon debe imprimirse en el punto final en lugar del punto inicial.
Por ejemplo, una salida válida para el ejemplo de entrada dado anteriormente sería:
| ##### ######### |
| ###### #-------- ### # |
| # # #/ # ####\ # |
--------- ## \ #### ----@
|# # # ### \ ## / |
|## ## #### \ #/ # |
|#### ##### #-- ## |
Tu camino solo necesita no estrellar al halcón. No necesita ser el camino más corto posible.
Puede suponer que siempre habrá al menos un camino posible hacia el final.
Puede enviar a STDOUT, en un archivo o cualquier equivalente, siempre que el campo de asteroides se imprima exactamente como en esta publicación (por ejemplo, enviar una lista de coordenadas para la ruta no es válido).
Casos de prueba
Un campo de asteroides normal.
| ##### ######### | | ###### # ### # | | # # # # #### # | @ ## #### |# # # ### ## | |## ## #### # # | |#### ##### # ## |
Salida posible
| ##### ######### | | ###### #-------- ### # | | # # #/ # ####\ # | --------- ## \ #### ----@ |# # # ### \ ## / | |## ## #### \ #/ # | |#### ##### #-- ## |
Campo de asteroides hiperregulares
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | @ # # # # # # # # # # # # # # |# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # |
Salida posible
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | -# #-# #-# #-# #-# #-# #-# #--@ |#\#/#\#/#\#/#\#/#\#/#\#/#\#/# | | #-# #-# #-# #-# #-# #-# #-# #| |# # # # # # # # # # # # # # # |
Núcleo de la estrella de la muerte
| # # # # | | # # # | | # # # # # | @ # # # # # | # # # # | | # # # # # | | # # # # |
Salida posible
| # # # -- # | | --- # # / #\ - | | / #\ # # / # \ /#\ | - # \ # #/ # - # ----@ | # \ # ---- # # | | # \#/ # # # | | # - # # # |
Trinchera estrella de la muerte
|##############################| |##############################| |##############################| @ |##############################| |##############################| |##############################|
Salida
|##############################| |##############################| |##############################| ------------------------------@ |##############################| |##############################| |##############################|
Cueva de asteroides
|### ##########################| |## # ############### ## ######| |# ### ######## ### ## # #####| @ ###### ###### ### ## ### |######## ### ### ## #########| |########## # ### ## ##########| |########### #####|
Salida posible
|###-##########################| |##/#\############### ##-######| |#/###--######## ### ##/#\#####| -######\###### ### ##/###-----@ |########--### ### ##/#########| |##########\# ### ##/##########| |###########-------- #####|
Tanteo
R2D2 está ocupado nadando en pantanos, por lo que tendrá que programar el controlador del Falcon usted mismo, lo cual es tedioso. Por lo tanto, el código más corto gana .
-
en el camino en cada turno, que se define como un movimiento "hacia adelante". Pero los movimientos reales son siempre dos diagonales a la izquierda seguidos de dos diagonales a la derecha.