Su desafío recibe una entrada del diseño de la prisión para determinar si alguno de los prisioneros puede escapar.
Entrada
La entrada puede estar en cualquier formato razonable, como una cadena, matriz, matriz de matrices, etc. La entrada constará de tres caracteres, en este caso #
, P
y espacio. La entrada no contendrá necesariamente los tres caracteres.
#
: Una paredP
: Un prisionero- espacio: un espacio vacío
Un ejemplo de entrada se verá así:
#####
# #
# P #
# #
#####
Salida
Un valor verdadero / falso de si la prisión es segura o no. La prisión solo es segura si puede contener a todos los prisioneros. Si algún prisionero puede escapar, no es seguro.
Un prisionero puede escapar si no está completamente cercado por una pared. Una unión diagonal está completamente cerrada.
Casos de prueba
############# Truthy
# P # P# #
# # # P #
#############
############# Truthy
# P P #
# # # P #
#############
############# Falsey
# P # P# #
# # # P #
########## ##
#### Truthy
# #
# #
# P ####
####
P Falsey
### Falsey
# #
# #
### P
code-golf
ascii-art
decision-problem
grid
path-finding
TheLethalCoder
fuente
fuente
Respuestas:
Caracoles , 13 bytes
Pruébalo en línea!
Imprime
0
para prisiones inseguras y el tamaño del cuadro delimitador de la entrada para prisiones seguras.La idea es asegurarnos de que no podamos encontrar una ruta desde una
P
celda fuera de los límites (~
) moviéndose solo ortogonalmente (o
) a través de espacios. Elt
es un teletransporte para que, independientemente de dónde intentemos el partido, intente todas las posiciones iniciales posibles para encontrar aP
.fuente
C # (.NET Core) ,
485 480 474 470 421408 bytesLa herramienta y el enfoque absolutamente incorrectos, pero no obstante ...
' '
con32
en las comparaciones.Pruébalo en línea!
Básicamente amplío las posiciones de las P cada vez que hay un espacio en blanco alrededor hasta que alcanza (o no) el borde del diseño.
Algunas licencias:
char[][]
como entrada para el diseño.0
como inseguro y1
tan seguro.fuente
1>0
y1<0
son más cortos quetrue
yfalse
.==0
convertirse<1
? Tiene al menos 1 byte de espacio en blanco irrelevante. ¿Puedes quitar elnew[]
s? (No siempre funciona, pero a veces le gustaint[] n = {1,2,3};
).{m[x][y]= p; c.Push(new[]
->{m[x][y]=p;c.Push(new[]
char
s aint
s, así que creo que puede reemplazar==' '
a==32
para guardar bytes. También debería poder hacer esto en comparaciones similares.Perl 5 , 69 bytes
-10 bytes gracias a @Grimy .
-2 bytes gracias a @Neil .
77 bytes de código +
-p0
banderas.Pruébalo en línea!
Algunas explicaciones breves :
la idea es poner un lugar
P
donde los prisioneros puedan ir. Si algunoP
está en la primera / última línea, o en la primera / última columna, entonces los prisioneros pueden ir allí y escapar, lo que significa que la prisión no está segura.s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
reemplaza un espacio a la derecha o debajo de aP
con aP
, o un espacio a la izquierda o encima de aP
.Finalmente,
/\A.*P|P.*\Z|^P|P$/m
verifica si una línea comienza o termina con aP
, o si hay unaP
en la primera o la última línea.fuente
*
o+
, la coincidencia más larga que puede hacer es el tamaño de una línea ... Ahora, por supuesto, si se compara con un enfoque más manual, basado en matrices, por ejemplo ¡Entonces sí, es bastante ineficiente!s/P(.{@{-}})? | (.{@{-}})?P/P$1$2P/s
.s/(P| )(.{@{-}})?(?!\1)(?1)/P$2P/s
.JavaScript (ES6),
134133 bytesToma entrada como una matriz de matrices de caracteres. Devoluciones
0
(inseguras) o1
(seguras).Casos de prueba
Mostrar fragmento de código
fuente
&&
s ser&
?|
. ¡Gracias!JavaScript (ES6), 121 bytes
Toma la entrada como una cadena rectangular delimitada por nueva línea. Devuelve 0 para inseguro y 1 para seguro. Según mi respuesta a Detect Failing Castles , aunque sería más eficiente evaluar a un prisionero fugitivo en cada paso, en lugar de una vez que hubieran terminado de explorar la prisión.
fuente
Octava,
6455 bytesPruébalo en línea!
o
¡Verifique todos los casos de prueba!
Explicación:
fuente
APL (Dyalog Classic) , 40 bytes
Pruébalo en línea!
'# '⍳⍵
codificar'#'
,' '
,'P'
como 0 1 2(⌽1,⍉)⍣4
rodear con 1s(××{1⊃⌈/⍵,⍉⍵}⌺3 3)⍣≡
relleno de inundación máximo de vecinos de celdas distintas de cero⊃2≠
¿No tenemos un 2 en la parte superior izquierda?fuente
Stax , 35 bytes CP437
Pruébalo en línea!
¡Seguramente el lenguaje de golf sin un interno para manejar la búsqueda de caminos también puede hacer esto!
Explicación
Utiliza el formato desempaquetado para explicar.
fuente
SmileBASIC,
154146 bytesEsperaba que una respuesta usando el relleno de inundación fuera más corta que esto.
Reemplace
31
con el carácter ASCII correspondiente.fuente