Entrada:
Una matriz que contiene enteros en el rango [0 - 9] .
Desafío:
Determine si todos los elementos distintos de cero están conectados entre sí verticalmente y / u horizontalmente.
Salida:
Un valor verdadero si todos están conectados, y un valor falso si hay elementos / grupos distintos de cero que no están conectados a otros elementos / grupos.
Casos de prueba:
Los casos de prueba están separados por línea. Los casos de prueba se pueden encontrar en formatos más convenientes aquí ( Felicitaciones a Dada ).
Los siguientes están todos conectados y deberían devolver un valor verdadero:
0
---
0 0
---
1 1 1
0 0 0
---
1 0 0
1 1 1
0 0 1
---
0 0 0 0 0 0
0 0 3 5 1 0
0 1 0 2 0 1
1 1 0 3 1 6
7 2 0 0 3 0
0 8 2 6 2 9
0 0 0 0 0 5
Los siguientes no están todos conectados y deberían devolver un valor falso:
0 1
1 0
---
1 1 1 0
0 0 0 2
0 0 0 5
---
0 0 5 2
1 2 0 0
5 3 2 1
5 7 3 2
---
1 2 3 0 0 5
1 5 3 0 1 1
9 0 0 4 2 1
9 9 9 0 1 4
0 1 0 1 0 0
Este es el código de golf , por lo que gana la presentación más corta en cada idioma. ¡Se alientan las explicaciones!
Inspirado en este desafío .
fuente
Respuestas:
Retina 0.8.2 ,
8077 bytesPruébalo en línea! Editar: guardado 1 byte gracias a @FryAmTheEggman. Explicación:
Simplifique a una matriz de
@
sy1
s.Cambiar uno
1
a a_
.Relleno de inundación desde el s
_
adyacente1
.Comprueba si quedan algunos
1
s.fuente
JavaScript (ES6),
136135 bytesDevuelve un booleano.
Casos de prueba
Mostrar fragmento de código
Comentado
La función recursiva g () primero busca una celda que no sea cero (siempre que el indicador globalmente definido z esté establecido en 0 ) y luego comienza el llenado de inundación desde allí (tan pronto como z! = 0 ).
fuente
MATL , 7 bytes
Esto proporciona una matriz que contiene todos los resultados verdaderos , o una matriz que contiene al menos un cero como falso .Pruébalo en línea!
También puede verificar la veracidad / falsedad agregando una
if
-else
rama en el pie de página; ¡pruébalo también!O verificar todos los casos de prueba .
Explicación
fuente
Wolfram Language (Mathematica) , 54 bytes
Guardado 2 bytes gracias al usuario202729.
Pruébalo en línea!
fuente
C, 163 bytes
¡Gracias a @ user202729 por guardar dos bytes!
Recorre la matriz en bucle hasta que encuentra el primer elemento distinto de cero. Luego deja de recorrer un momento y establece recursivamente todos los elementos que no son cero conectados al elemento encontrado a cero. Luego recorre el resto de la matriz para verificar si cada elemento es ahora cero.
Pruébalo en línea!
Desenrollado:
fuente
Perl,
8079787370 bytesIncluye
+2
para0a
Dé la matriz de entrada sin espacios en STDIN (o de hecho como filas separadas por cualquier tipo de espacio en blanco)
Más fácil de leer si se coloca en un archivo:
fuente
Java 8, 226 bytes
Esto tomó bastante tiempo, así que me alegra que esté funcionando ahora ...
Explicación:
Pruébalo en línea.
fuente
APL (Dyalog Unicode) , SBCS de 36 bytes
Pruébalo en línea!
fuente
Jalea , 23 bytes
Pruébalo en línea!
Explicación.
El programa etiqueta cada componente morfológico con un número diferente, luego verifica si hay menos de 3 números. (incluido
0
)Considere una fila en la matriz.
Aplica repetidamente esta función para todas las filas y columnas de la matriz, en todos los órdenes, eventualmente todos los componentes morfológicos tendrán la misma etiqueta.
Y finalmente...
fuente
¦
toma O (n).Haskell , 132 bytes
extraído de Solve Hitori Puzzles
indices m
enumera las(line,cell)
ubicaciones de la cuadrícula de entrada.filter((/=0).(m!))
filtra todas las ubicaciones con valores distintos de cero.splitAt 1
divide el primer miembro en una lista singleton junto a una lista de descanso.any(==1)[(b-d)^2+(p-q)^2|(d,q)<-f]
le dice si(b,p)
toca la fronteraf
.\(f,e)->partition(\(b,p)->touches(b,p)f)e
se separa de los tocadores de los que no [todavía] tocan.until(null.fst)advanceFrontier
repite esto hasta que la frontera no pueda avanzar más.null.snd
mira el resultado si se alcanzaron todas las ubicaciones a las que se debe llegar.Pruébalo en línea!
fuente
Grime , 37 bytes
Imprime
1
por partido y0
sin partido. Pruébalo en línea!Explicación
El no terminal
C
coincide con cualquier carácter distinto de cero que esté conectado al primer carácter distinto de cero de la matriz en el orden de lectura en inglés.Alguna explicación:
e
coincide con un rectángulo de ancho o alto cero que es parte del borde de la matriz de entrada, y$
es un "comodín" que coincide con cualquier cosa. La expresióne/\0{/e\0*0$e
se puede visualizar de la siguiente manera:La expresión en
CoX^0oX
realidad se analiza como((CoF)0)oX
; eloF
yoX
son operadores de sufijo y concatenación de medios fichas concatenación horizontal. los^
da yuxtaposición una prioridad más alta entoncesoX
, por lo que la rotación se aplica a la totalidad de sub-expresión. EloF
corrige la orientación deC
después de que se giraoX
; de lo contrario, podría coincidir con la primera coordenada distinta de cero en un orden de lectura en inglés rotado.Esto significa que todos los caracteres distintos de cero deben estar conectados al primero. El especificador de cuadrícula
:
es técnicamente un operador postfix, peroC|:\0
es azúcar sintáctico para(C|\0):
.fuente
Perl 5 ,
131129+ 2 (-ap
) = 133 bytesPruébalo en línea!
fuente
Python 2 ,
211163150 bytesPruébalo en línea!
La salida es a través del código de salida. La entrada es como una lista 1d y el ancho de la matriz.
fuente