Escreva um programa ou função que utilize uma sequência de linhas múltiplas de 0
's 1
' e 's. Nenhum outro caractere estará na string e a string sempre será retangular (todas as linhas terão o mesmo número de caracteres), com dimensões tão pequenas quanto 1 × 1, mas, caso contrário, os 0
's 1
' e 's podem ser organizados arbitrariamente.
Você pode assumir que a string possui uma nova linha à direita opcional e, se desejar, pode usar dois caracteres ASCII imprimíveis distintos no lugar de 0
e 1
.
Imprima ou retorne um valor verdadeiro se todas as regiões conectadas ao caminho de 0
's 1
' e 's na cadeia de caracteres forem retângulos sólidos , caso contrário, produz um valor falso .
Um caminho conectado à região de 0
significa que, de qualquer um 0
na região, todos os outros 0
podem ser alcançados movendo-se para cima, para baixo, esquerda e direita para os outros 0
(e não se movendo na diagonal, não se movendo para nenhum 1
, e não se movendo fora dos limites de cordas). A mesma idéia se aplica ao 1
caminho de regiões conectadas.
Um retângulo sólido de 0
's significa que toda a área do retângulo é preenchida com 0
' e 1
' não '. A mesma idéia se aplica a 1
retângulos sólidos.
O código mais curto em bytes vence. O desempatador é a resposta anterior.
(Observe que a corda não se enrola com as condições de contorno toroidais .)
Exemplos
1) Esta sequência de entrada possui 3 regiões conectadas ao caminho (2 para 0
e 1 para 1
). Apenas a 00
região inferior direita é um retângulo sólido, portanto a saída seria falsa.
0011
0111
0100
2) Esta sequência de entrada possui 4 regiões conectadas ao caminho (2 para ambos 0
e 1
). Todos eles são retângulos sólidos, portanto a saída seria verdadeira.
0011
0011
1100
3) Esta entrada possui 2 regiões conectadas ao caminho, mas apenas uma delas é um retângulo sólido, portanto a saída seria falsa.
00000000
01111110
00000000
4) Esta entrada possui apenas 1 região conectada ao caminho e é trivialmente um retângulo sólido, portanto a saída é verdadeira.
11111111
11111111
11111111
Casos de teste
Um T
logo abaixo da string de entrada F
significa verdade , significa falsidade.
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