Introducción
Jonny quiere jugar a Frogger. Sin embargo, no es muy bueno. De hecho, solo intentará avanzar, y solo después de que las plataformas se hayan movido.
Averigua si la rana de Jonny logra llegar al final del camino o si muere en su camino.
Desafío
El programa se recibe como entrada una rejilla Frogger compuesta por 0
s y 1
s, con el siguiente formato:
- La cuadrícula tendrá un ancho y largo aleatorio, y al menos 3x3
1
representa plataformas0
representa aguaF
representa la posición inicial de la rana- Cada primera y última línea de la cuadrícula estará compuesta solo por
1
s, y no se moverá, y la ranaF
se colocará al azar en la última línea - Cada capa intermedia siempre se moverá y tendrá un
<
o>
al final de cada línea que indica si se mueve hacia la izquierda o hacia la derecha
Está permitido reemplazar estos símbolos con los suyos, siempre que sean distintos y especifique los reemplazos en su respuesta.
La entrada puede estar en cualquier formato compatible (cadena con saltos de línea, matriz de cadenas, matriz de caracteres, ...).
Reglas de desafío
- Cada turno, todas las plataformas se moverán una casilla, según la dirección indicada por el signo
<
o>
- Las plataformas reaparecen en el otro lado de la cuadrícula si se las empuja fuera de la "pantalla"
- Si la rana está en una plataforma en movimiento, se moverá junto con ella
- Después de eso, la rana saltará un cuadrado hacia la fila superior. La rana se moverá cada turno.
- La rana muere si salta al agua (
0
) o toca el costado de la cuadrícula junto con una plataforma móvil
Su programa tiene que generar un valor verdadero si la rana sobrevive y un valor falso de lo contrario.
Este es el código de golf , por lo que gana la respuesta más corta en bytes. Se aplican lagunas estándar.
Ejemplos
Ejemplo 1
Entrada
11111
00111>
00101<
1F111
Salida
1
Ejecución
Turno 1:
11111
10011
01010
1F111
11111
10011
0F010
11111
Vuelta 2:
11111
11001
F0100
11111
11111
F1001
10100
11111
Turno 3:
11111
1F100
01001
11111
1F111
11100
01001
11111
Ejemplo 2
Entrada
11111
00100<
00100<
1F111
Salida
0
Ejecución
Turno 1:
11111
01000
01000
1F111
11111
01000
0F000
11111
Vuelta 2:
11111
10000
F0000
11111
11111
F0000
10000
11111
Turno 3:
11111
00001
00001
11111
fuente
<
o>
así podemos tomar matrices rectangulares como entrada? Por cierto, ¡buen desafío!<
o>
al final.0
frente, o esperará al siguiente1
? Si puede esperar, ¿avanzará cada vez1
o puede esperar inteligentemente? Es decir, con el caso de prueba11111 00001< 00011< 11F11
, ¿será falsey porque salta al agua ( pastebin de pasos ); será falsey porque se mueve fuera del marco ( pastebin de pasos ); ¿O será sincero porque espera de manera inteligente la segunda plataforma antes de saltar ( pegar pasos )?0
.Respuestas:
Python 2 ,
168165152145137129 bytesPruébalo en línea!
El formato de entrada es una lista de cadenas; caracteres que tienen significados como se dan en el enunciado del problema.
Explicación:
i
es el número de turno (comenzando con el Turno 1);x
es la posición del frogger al comienzo de ese turno.La fila sobre la que está a punto de pisar el frogger es la cadena
l
(tenga en cuenta que a través del corte, estos vienen en orden de abajo hacia arriba).d=('<'in l)%-2|1
cede-1
o1
depende de la dirección en que se mueve la fila.Como este es el
i
turno th, esa fila se habrá desplazado de su posición original eni
bytes; y entonces el personaje sobre el que está a punto de saltar el frogger esl[(x-d*i)%L]
dondeL
está el ancho de la fila, por lo que queremos que ese personaje sea igual a'1'
; es decir,>'0'
.Además, queremos comprobar que el frogger no se moverá del borde al comienzo del siguiente turno; esa es la función de la expresión
-1<x+d<L
.Estas condiciones están encadenadas (como
'0'>-1
siempreTrue
); y si en algún momento la expresión resultante es falsa,k
se convertirá (y luego se mantendrá)0
.En cualquier caso, actualizamos la posición del frogger
x+=d
y topamos el número de fila; luego haga espuma, enjuague, repita.fuente
Python 2 ,
246245244242 bytes-3 bytes gracias al Sr. Xcoder
-1 bytes gracias a Jonathan Frech
Pruébalo en línea!
Explicación
d
es la dirección en que se moverá cada capaq
es el personaje que se envolverá[q,' '][q<'L']
soltará la rana fuera de la pantallasum([r[d+1:d-1],[[q,' '][q<'L']]][::d-~d],[])+r[-1:]
eliminará el último carácter (la dirección), luego eliminará el primer carácter y lo agregará o eliminará el segundo último y lo antepondrá (segúnd
), y agregará la dirección hacia atrás, moviendo efectivamente toda la fila hacia la izquierda / derecha.if'F'in r:j=r.index('F');r[j]='L';m[i-1][j]=min('F',m[i-1][j])
hará que la rana salte hacia adelantemin('F',m[i-1][j])
hará que la rana caiga al aguamin
y<
) sigue el orden' ' < '0' < '1' < 'F' < 'L'
La entrada será una lista de caracteres:
' '
- agua'F'
- rana'L'
- plataforma'0'
- mover la capa a la izquierda'1'
- mover la capa a la derechafuente
if i<len(m)-1
posiblemente podría serif~-len(m)>i
.Java 8,
293277 bytesUtiliza los caracteres predeterminados como se especifica en la descripción del desafío (
01F<>
).Pruébalo en línea.
Explicación:
fuente