Escriba un programa o función que tome una cadena multilínea de 0
'sy 1
' s. No habrá otros caracteres en la cadena y la cadena siempre será rectangular (todas las líneas tendrán el mismo número de caracteres), con dimensiones tan pequeñas como 1 × 1, pero de lo contrario las 0
'sy 1
' pueden estar dispuestas arbitrariamente.
Puede suponer que la cadena tiene una nueva línea final opcional, y si lo desea, puede usar dos caracteres ASCII imprimibles distintos en lugar de 0
y 1
.
Imprima o devuelva un valor verdadero si todas las regiones conectadas a la ruta de ambos 0
's y 1
' s en la cadena son rectángulos sólidos , de lo contrario genera un valor falso .
Una región de ruta conectada0
significa que desde cualquiera 0
de la región, 0
se puede llegar a todas las demás moviéndose solo hacia arriba, hacia abajo, hacia la izquierda y hacia la derecha hacia las de otras personas 0
(y sin moverse en diagonal, sin moverse hacia ninguna 1
, y no se mueve fuera de los límites de la cadena). La misma idea se aplica a las 1
regiones conectadas por ruta.
Un rectángulo sólido de 0
's significa que toda el área del rectángulo está llena de 0
' sy no 1
'. La misma idea se aplica a 1
los rectángulos sólidos.
El código más corto en bytes gana. Tiebreaker es la respuesta anterior.
(Tenga en cuenta que la cadena no se ajusta a las condiciones de contorno toroidales ).
Ejemplos
1) Esta cadena de entrada tiene 3 regiones conectadas a la ruta (2 para 0
y 1 para 1
). Sin 00
embargo, solo la región inferior derecha es un rectángulo sólido, por lo que la salida sería falsa.
0011
0111
0100
2) Esta cadena de entrada tiene 4 regiones conectadas a la ruta (2 para ambos 0
y 1
). Todos ellos son rectángulos sólidos, por lo que el resultado sería verdadero.
0011
0011
1100
3) Esta entrada tiene 2 regiones conectadas a la ruta, pero solo una de ellas es un rectángulo sólido, por lo que la salida sería falsa.
00000000
01111110
00000000
4) Esta entrada tiene solo 1 región conectada a la ruta y es trivialmente un rectángulo sólido, por lo que la salida es verdadera.
11111111
11111111
11111111
Casos de prueba
Un T
poco debajo de la cadena de entrada significa verdadero, F
significa falso.
0
T
1
T
00
T
01
T
10
T
11
T
0000000
T
1111111
T
011100100100101100110100100100101010100011100101
T
00
11
T
01
10
T
01
11
F
00
01
F
11
11
T
110
100
F
111
000
T
111
101
111
F
101
010
101
T
1101
0010
1101
0010
T
1101
0010
1111
0010
F
0011
0111
0100
F
0011
0011
1100
T
00000000
01111110
00000000
F
11111111
11111111
11111111
T
0000001111
0000001111
T
0000001111
0000011111
F
0000001111
1000001111
F
1000001111
1000001111
T
1110100110101010110100010111011101000101111
1010100100101010100100010101010101100101000
1110100110010010110101010111010101010101011
1010100100101010010101010110010101001101001
1010110110101010110111110101011101000101111
F