Entrada
Su entrada es una sola cadena, separada por nuevas 2n+1
líneas en líneas de longitud 2n+1
, para algún número entero n ≥ 0
. El entero n
no es parte de la entrada; Tendrás que calcularlo a partir de la cadena. Las líneas están compuestas por los "caracteres de dirección" >^<v
. Si las nuevas líneas plantean un problema, puede reemplazarlas por tuberías verticales |
.
La entrada forma una cuadrícula cuadrada de tamaño (2n+1)x(2n+1)
, y cada celda de la cuadrícula se interpreta como un enrutador de rotor , que apunta en una de las cuatro direcciones cardinales. Procedemos a colocar un token en el enrutador en el centro de la cuadrícula, y luego los enrutadores lo moverán de la siguiente manera. Cuando el token aterriza en un enrutador, el enrutador gira 90 grados en el sentido contrario a las agujas del reloj y mueve el token un paso en la nueva dirección a la que apunta. Si aterriza en otro enrutador, el proceso se repite, pero eventualmente, el token se caerá de la red.
Salida
Su salida es la configuración final de los enrutadores, en el mismo formato que la entrada.
Ejemplo
Como ejemplo de entrada, considere la 3x3
cuadrícula
<^<
^><
>^v
donde el enrutador central se ha resaltado para indicar el token (es un poco difícil de ver). El enrutador central gira para mirar hacia el norte y mueve el token a la celda central de la fila superior:
<^<
^^<
>^v
Este enrutador gira para mirar hacia el oeste y envía el token a la esquina superior izquierda:
<<<
^^<
>^v
El enrutador en la esquina envía el token al sur, por lo que ahora está en la celda más a la izquierda de la fila central:
v<<
^^<
>^v
Ese enrutador gira para mirar hacia el oeste y envía el token fuera de la red.
v<<
<^<
>^v
Esta es la configuración final de la cuadrícula, por lo que su programa debería generarla. Tenga en cuenta que en ejemplos más complejos, el token puede pasar el mismo enrutador varias veces antes de caerse de la red.
Reglas
Puede escribir una función o un programa completo. Este es el código de golf, por lo que gana el conteo de bytes más bajo. Las lagunas estándar no están permitidas. Puede decidir si hay una nueva línea final en la entrada y / o salida.
Casos de prueba
Input:
v
Output:
>
Input:
<^<
^><
>^v
Output:
v<<
<^<
>^v
Input:
>>^>>
v<vv<
>^>^<
^<>>^
vvv>>
Output:
>>^>>
>v>>v
^>>vv
^^>>>
v^<<^
Input:
<^^^^^^^^
<<^^^^^^>
<<<^^^^>>
<<<<^^>>>
<<<<^>>>>
<<<vv>>>>
<<vvvv>>>
<vvvvvv>>
vvvvvvvv>
Output:
>>>>>>>>v
^>>>>>>vv
^^>>>>vvv
^^^>>vvvv
<<<<<vvvv
^^^^<<vvv
^^^<<<<vv
^^<<<<<<v
^<<<<<<<<
Respuestas:
CJam,
626163 bytesPruébalo en línea
Ampliado y comentado:
Mi solución funciona en la entrada como una cadena plana, por lo que solo hay un valor de posición para realizar un seguimiento y prácticamente no hay procesamiento previo / posterior; solo hay 2 bytes de preprocesamiento para agregar nueva línea al comienzo de la cuadrícula y 2 bytes de posprocesamiento para eliminarlo de la salida. Pero estos 4 bytes valen la pena ya que me permiten mantener nuevas líneas y "ejecutarlas" como enrutadores, pero "rotan" en otra nueva línea y establecen la posición en cero. Y el bucle principal termina cuando la posición se vuelve cero.
fuente
CJam,
9069 bytesEnorme por ahora,todavía se puede reducir mucho.Pruébalo en línea aquí
fuente
JavaScript (ES6) 121
120 127 129Una función con nombre que obtiene la cadena como parámetro de entrada y devuelve la salida.
Suponiendo que la cadena de entrada se termina con una nueva línea.
Editar corrección de errores, .search () no funciona bien con
undefined
Desengañado y explicado
Prueba en la consola Firefox / FireBug
Salida
fuente