fundo
Um poliomino é chamado L-convexo , se for possível viajar de qualquer ladrilho para outro ladrilho por um caminho em forma de L, ou seja, um caminho que segue as direções cardinais e muda de direção no máximo uma vez. Por exemplo, o poliomino de 1
s na figura
0 0 1 1 1 0
1 1 1 1 0 0
1 1 0 0 0 0
não é L-convexo, pois os dois caminhos em forma de L do canto inferior esquerdo 1
para o canto superior direito 1
contêm um 0
:
0>0>1>1>1 0
^ ^
1 1 1 1 0 0
^ ^
1>1>0>0>0 0
No entanto, o poliomino de 1
s nesta figura é L-convexo:
0 1 1 1 0 0
1 1 1 1 1 1
0 1 1 0 0 0
Entrada
Sua entrada é uma matriz 2D de bits no formato nativo do seu idioma ou como uma string delimitada por nova linha, se o nosso idioma não tiver matrizes. É garantido que contenha pelo menos um 1
.
Resultado
Sua saída deve ser um valor verdadeiro se o conjunto de 1
s for um poliomaino L-convexo e um valor falso se não. Essas saídas devem ser consistentes: você deve gerar o mesmo valor verdadeiro para todas as entradas L-convexas e o mesmo valor falso para outras. Observe que um conjunto desconectado de 1
s (que não é um poliomino) resulta em uma saída falsa.
Regras e Pontuação
Você pode escrever um programa completo ou uma função. A contagem de bytes mais baixa vence e as brechas padrão não são permitidas.
Casos de teste
Esses casos de teste também devem funcionar se você girar ou refletir as matrizes ou adicionar linhas de 0
s a qualquer borda.
False instances
01
10
111
101
111
1101
1111
1110
1100
1000
0011
01100
11110
01110
00110
011000
011110
001111
True instances
1
01
11
010
111
010
001
011
111
11100
11110
01100
01000
011000
011000
111100
111111
001000