Inspirado por esto .
Fondo
El granjero malvado ha decidido quemar su campo de trigo para subir los precios. Para garantizar la destrucción total, también ha empapado su campo en gasolina. Aún más desafortunadamente, estabas caminando en el campo cuando estaba encendido, y debes salir rápidamente para sobrevivir.
Reto
Dado un campo que contiene trigo, fuego y su ubicación, determine si puede salir del campo a tiempo.
Un campo consiste en trigo (aquí representado por .
) y fuego ( F
). Aquí su ubicación está marcada con un O
. Por ejemplo:
...F...F
F.......
........
.F......
....O...
...F....
........
.F....F.
Cada segundo te mueves a cualquier celda adyacente (pero no en diagonal), y cada fuego se extiende a cada celda adyacente. Si no puedes moverte a una celda que no se incendiará, morirás. Si logras salir del campo, sobrevives. Veamos qué sucede en este ejemplo:
...F...F
F.......
........
.F......
....O...
...F....
........
.F....F.
..FFF.FF
FF.F...F
FF......
FFF.....
.F.F.O..
..FFF...
.F.F..F.
FFF..FFF
FFFFFFFF
FFFFF.FF
FFFF...F
FFFF....
FF.FF.O.
.FFFFFF.
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFF.FF
FFFFF.FF
FFFFFFFO
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFFO <-- you made it out and survived, barely
FFFFFFFF
FFFFFFFF
FFFFFFFF
Reglas
- Su entrada es el campo como una cuadrícula. Puede elegir cualquier formato de entrada, incluida una cadena con separadores de línea o una matriz 2D.
- Es posible que no se tome como entrada los lugares de fuego y / o usted mismo.
- Puede usar 3 valores distintos como trigo, fuego y su posición, incluidas las no cadenas para la entrada de matriz.
- Los campos siempre tienen un tamaño de al menos 1x1, son rectangulares y no contienen caracteres no válidos.
- Cualquier campo contendrá exactamente uno del valor que representa su ubicación, y cualquier otra posición puede o no ser activada.
- Su salida es uno de los dos valores distintos para "sobrevivir" o "morir", como es habitual en el problema de decisión .
- Se aplican reglas estándar de código de golf .
Casos de prueba
Sobrevivió
O
....
.O..
....
FFFFF
.....
..O..
.....
FFFF
FFFO
FFFF
.F....
......
......
.F....
..O...
.FF...
.F....
..FF..
...F...F
F.......
........
.F......
....O...
...F....
........
.F....F.
No sobrevivio
FFF
FOF
FFF
F.F
.O.
F.F
....F
.....
..O..
.....
F....
.F....F.
........
........
F..O....
........
.....F..
...F...F
F......F
........
.F......
....O...
...F....
........
.F....F.
F..F
.O..
FF..
fuente
Respuestas:
Caracoles, 15 bytes
Pruébalo en línea!
1
significa supervivencia mientras que0
significa muerte.Dado que es imposible escapar del fuego, nunca es útil tratar de evitarlo. La mejor ruta es siempre una línea recta. Por lo tanto, solo hay cuatro opciones posibles de ruta de escape. Para determinar si una dirección es segura, verificamos si hay alguno
F
en el "cono de fuego" que apunte en esa dirección.fuente
Python 2 ,
283218209208 bytesPruébalo en línea!
Toma de entrada como una cadena separada saltos de línea, y vuelve
True/False
paraDead/Alive
Funciona marcando cada dirección (udlr) para ver si hay
F
ira mirando hacia afuera:Ejemplo:
Entrada:
Comprobaciones de fuego:
Si todas las direcciones contienen fuego, mueres, de lo contrario hay un escape.
Editar: Volver a tomar una cadena como entrada, y ahora solo verifica arriba / derecha, pero también verifica la entrada hacia atrás (hacia abajo / izquierda)
Ahorré muchos bytes gracias al Sr. Xcoder y Felipe Nardi Batista
fuente
JavaScript, 174 bytes
Formato de entrada:
F
, 1 para.
, 0 paraO
Salida:
Intentalo:
Mostrar fragmento de código
Considere un autómata celular. Hay 3 estados para una celda
O
(accesible por personas),F
(capturado),.
(nada acaba de suceder). La regla para crear la próxima generación es:Una vez que hay una célula en el borde
O
, la gente sobrevive. Si esto no sucedió en cantidad suficiente, la gente murió.fuente
Octava, 71 bytes
Pruébalo en línea!
o
¡Verifique todos los casos de prueba!
Formato de entrada:
1
para.
,2
paraO
y3
paraF
Salida:
true
yfalse
Explicación:
Explicación:
fuente
Retina , 243 bytes
Pruébalo en línea! Requiere que el fondo sea espacios en lugar de
.
s (o podría usarse algún otro personaje seguro para regexp). Explicación:Si hay un
O
en cualquier borde, elimine todo lo demás (caso de supervivencia)Coloque un
#
en cualquier espacio sobre un existenteO
.Y a
#
en cualquier espacio debajo de un existenteO
.Cambie
#
s aO
s, y también cualquier espacio a la izquierda o derecha de un existenteO
.Coloque
#
s sobre cualquierF
s existente . Estos pueden sobrescribirO
s, así como espacios.Coloque
#
s debajo de cualquierF
s existente , también sobrescribiendoO
s, así como espacios.Cambie
#
s aF
s, y también cualquierO
espacio a la izquierda o derecha de un existenteF
. Repita hasta que losF
s hayan consumido todo.Regrese
1
para sobrevivir,0
si no.fuente