fundo
Eu tenho um monte de imagens em preto e branco antigas e granuladas. Alguns deles mostram videiras subindo em uma parede, outros não - sua tarefa é classificá-los para mim.
Entrada e saída
Sua entrada é uma matriz 2D retangular de bits A , fornecida em qualquer formato conveniente. Não ficará vazio, mas não é garantido que ele contenha 0 e 1. A matriz representa uma videira se as seguintes condições forem válidas:
- A linha inferior de A contém pelo menos um 1. Essas são as raízes da videira.
- Cada 1 em A é conectado à linha inferior por um caminho de 1s que só vai para a esquerda, direita e para baixo (não para cima nem para a diagonal). Esses caminhos são os ramos da videira.
Sua saída é um valor de verdade consistente se a entrada representar uma videira e um valor de falsy consistente caso contrário.
Exemplos
Essa matriz representa uma videira:
0 0 1 0 0 1
0 1 1 0 0 1
0 1 0 1 1 1
1 1 0 1 0 1
0 1 1 1 0 1
0 0 1 0 1 1
Essa entrada não representa uma videira, pois há um 1 no meio da borda direita que não está conectado às raízes por um ramo:
0 0 0 1 1 0
0 1 0 1 1 1
0 1 0 1 0 1
0 1 1 1 1 0
0 0 1 1 0 1
A matriz all-0 nunca representa uma videira, mas a matriz all-1 sempre representa.
Regras e pontuação
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
Entradas verdadeiras:
1
0
1
1
01
11
0000
0111
1100
1001
1111
1111
1111
1111
001001
011001
010111
110101
011101
001011
1011011
1001001
1111111
0100000
0111111
1111001
1001111
1111101
0000000
0011100
0010100
0011100
0001000
1111111
0001000
0011100
0010100
0010100
Entradas falsas:
0
1
0
10
01
000
000
000
011
110
000
111111
000000
101011
111001
010010
001000
000010
110001
001100
111111
110101
010011
111011
000110
010111
010101
011110
001101
11000000
10110001
10011111
11110001
01100011
00110110
01101100
01100001
01111111