Imagine una matriz bidimensional de valores booleanos, donde los 0 representan cuadrados de hierba en un terreno rectangular y los 1 representan cercas.
Escriba una función que acepte la matriz 2D como entrada y determine si puede viajar desde cualquier área de hierba a cualquier otra área de hierba, utilizando solo movimientos norte / este / oeste / sur, sin toparse con una cerca.
Si cualquier área de hierba en la matriz está completamente encerrada por cercas (lo que significa que no puede viajar N / E / W / S para llegar a cualquier otra área de hierba en la matriz), la función debería devolver falso; de lo contrario, debería volver verdadero.
A continuación hay dos matrices de muestra que puede usar como entradas, aunque su función debería poder manejar no solo estas, sino también cualquier matriz 2D de valores booleanos:
0 0 0 0 0
0 1 0 0 0
0 1 1 1 1
0 0 0 0 0
0 0 0 1 1
(should return true)
0 1 0 1 0
0 1 1 0 0
0 0 0 0 0
0 0 0 1 0
1 1 1 1 0
(should return false, since the middle 0 in the top row is fully enclosed)
El código de trabajo más corto gana. Elegiré al ganador después de que haya pasado una semana o no haya habido nuevos envíos en 24 horas.
1 1 1
?1 0 1
;1 1 1
? Hay una celda de hierba en el centro. Visualmente, la celda de hierba en el centro está completamente encerrada por cercas, pero, según su definición, no lo está.Respuestas:
Matlab 45
fuente
input('');c=bwconncomp(~ans,4);c.NumObjects<2
Esto lo convertiría en 45 caracteres.APL (39)
Uso:
fuente
Mathematica,
6058 caracteresUso:
fuente
f=Max@WatershedComponents[Image@#,CornerNeighbors->1>2]<2&
Rubí,
202198193Hace un relleno de inundación, luego verifica si quedan 0 ceros.
fuente
PHP 147
202177165149bytesEDITAR He superado mi truco gzip con una solución php real.
Un poco largo ... ingresado como una cadena de texto, sin espacios, filas delimitadas por nuevas líneas. Se inunda con
c
s y luego se comprueba para ver si quedan ceros. En el bucle que usoexp
como límite superior bruto en el número de iteraciones requeridas. Aprovecho la simetría para manejar los casos duplicados en menos códigoAquí hay un caso de prueba sin golf:
fuente
Excel VBA,
305215 BytesSí, jaja VBA , pero la naturaleza matricial del problema sugiere que una solución práctica en Excel podría ser interesante (¡Además, alguien ya ha enviado una respuesta en mis otros idiomas!). Obviamente, VBA no va a ser el más breve, pero creo que es razonable.
Esta inundación se llena desde un punto de partida arbitrario y luego verifica si queda alguna "hierba"
R es un rango de hoja de trabajo con 1 y 0 que representan las cercas y el césped como se define en el problema. Bono, el campo de juego no tiene que ser rectangular o incluso contiguo.
Por ejemplo, devolvería False. No se puede llegar a los ceros a la derecha desde los ceros a la izquierda. El campo irregular no lo rompe.
Algunas notas sobre el golf.
Creo que algunos caracteres podrían recortarse si el requisito se invirtió con respecto a 1 y 0, pero no lo suficiente como para que valga la pena invertirlo.
VBA insiste en un grupo de espacios en blanco (a = b vs a = b), lo que no ayuda al recuento de caracteres.
S debe declararse explícitamente como un rango. Si se deja una variante, se convierte en un valor de rango en lugar de un rango.
Tal vez una mejor manera de ramificar la inundación? No pude encontrar un bucle que guardó caracteres para enviarlo N / E / S / W
Editar: reconsideró el caso base en el relleno de inundación, logró recortar bastante comprobando si está en un caso base después de la recursión en lugar de prevenir la recursividad.
fuente
Python (219 bytes)
Definitivamente no es el más corto, pero es mi primer intento aquí, así que estoy orgulloso de ello:
Su entrada debe ser una Cadena de 0s y 1s donde las filas están delimitadas por un carácter de nueva línea (\ n).
Ejemplo de uso:
fuente
and
, creo que ahorra algunos caracteresPitón (196)
Llenado de inundación estándar.
Toma la matriz a través de STDIN con cada fila separada por un solo espacio. Por ejemplo "01010 01100 00000 00010 11110".
fuente
Mathematica 53
Llama a la función interna
Image`MorphologicalOperationsDump`imageBinaryLabel
, que es similar aMorphologicalComponents
.fuente
PHP (286 caracteres)
Demasiado tiempo, probablemente he recorrido un largo camino.
No golfizado:
fuente
C #, 235 bytes
Intenta rellenar cada celda del tablero, hace que solo un relleno de inundación sea verdadero.
fuente
Python 2.X + 3.X: 335 caracteres
Golfizado:
Sin golf:
fuente