Barbanegra era un pirata Inglés de principios del 18 º siglo. Aunque era conocido por saquear y tomar barcos, comandó sus naves con el permiso de sus tripulaciones. No hay informes de que él haya dañado o asesinado a sus cautivos.
Este desafío es en honor al infame Barbanegra e inspirado en el Día Internacional de la Charla como un pirata (19 de septiembre). También es lo contrario de este desafío de Pyrrha .
El reto
Cree un programa que tome un mapa del tesoro como entrada (compuesto por los caracteres que se enumeran a continuación) y muestre sus instrucciones.
Entrada
Todas las entradas consistirán en v
, >
, <
, ^
, espacio en blanco, y una sola X
.
Puede asumir lo siguiente:
el mapa nunca se enrollará o se cruzará
la flecha de inicio siempre será el carácter inferior en la columna de la izquierda
siempre habrá un tesoro (
X
)
Una entrada de muestra se muestra a continuación.
>>v >>>>>>v
^ v ^ v
^ v ^ v<<
^ v ^ v
^ >>>>^ >>X
^
>>^
Salida
La salida debe ser una ", "
cadena de direcciones delimitada. A continuación se muestra la salida correcta del mapa anterior.
E2, N6, E2, S4, E4, N4, E6, S2, W2, S2, E2
Se permite una nueva línea o espacio final.
Ejemplos
In:
>>>>>>>>>>>>>>>v
v
v
>>>>X
Out:
E15, S3, E4
In:
>>>>>>v
^ v
^ >>>>X
Out:
N2, E6, S2, E4
In:
X
^
^
^
Out:
N3
In:
>>>>>>v
^ v
^ v
v
>>>>>>X
Out:
N2, E6, S4, E6
In:
X
^
^
>^
Out:
E1, N3
In:
>X
Out:
E1
In:
v<<<<<
vX<<<^
>>>>^^
>>>>>^
Out:
E5, N3, W5, S2, E4, N1, W3
¡Feliz charla internacional como un día pirata!
Respuestas:
CJam, 78 bytes
Pruébalo en línea .
Explicación
La idea principal aquí es encontrar la línea más larga (llamaremos a esta longitud
T
), luego rellenar todas las líneas a la misma longitud y concatenarlas (esta nueva cadena esU
). De esta manera, solo se necesita un contador para moverse en el mapa. Sumar / restar1
significa moverse hacia la derecha / izquierda en la misma línea, sumar / restarT
significa moverse hacia abajo / arriba una línea.Ahora es el momento de configurar el ciclo.
El cuerpo del bucle utiliza una tabla de búsqueda y evalúa para elegir qué hacer. Al comienzo de cada iteración, el elemento de la pila superior es la posición actual. Debajo hay todas las direcciones NSWE procesadas. Al final de la iteración, la nueva dirección se coloca debajo de la posición y se usa una copia de la misma como condición para el bucle. Los caracteres distintos de cero son verdaderos. Cuando se encuentra una X, se empuja 0 como la dirección, terminando el ciclo.
Ahora las miradas se encaja como esto:
[directions 0 position]
. Vamos a generar la salida.fuente
CJam, 86 bytes
Pruébalo en línea
Explicación:
fuente
Javascript (ES6), 239 bytes
Explicación:
fuente
JavaScript (ES6), 189
Pruebe a ejecutar el fragmento a continuación en un navegador compatible con EcmaScript 6.
Menos golf
fuente