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 0s y 1s, con el siguiente formato:
- La cuadrícula tendrá un ancho y largo aleatorio, y al menos 3x3
1representa plataformas0representa aguaFrepresenta la posición inicial de la rana- Cada primera y última línea de la cuadrícula estará compuesta solo por
1s, y no se moverá, y la ranaFse 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.0frente, o esperará al siguiente1? Si puede esperar, ¿avanzará cada vez1o 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:
ies el número de turno (comenzando con el Turno 1);xes 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|1cede-1o1depende de la dirección en que se mueve la fila.Como este es el
iturno th, esa fila se habrá desplazado de su posición original enibytes; y entonces el personaje sobre el que está a punto de saltar el frogger esl[(x-d*i)%L]dondeLestá 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'>-1siempreTrue); y si en algún momento la expresión resultante es falsa,kse convertirá (y luego se mantendrá)0.En cualquier caso, actualizamos la posición del frogger
x+=dy 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
des la dirección en que se moverá cada capaqes 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 aguaminy<) 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)-1posiblemente 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