sfondo
Un poliomino è chiamato L-convesso , se è possibile viaggiare da qualsiasi piastrella a qualsiasi altra piastrella mediante un percorso a forma di L, cioè un percorso che va nelle direzioni cardinali e cambia direzione al massimo una volta. Ad esempio, il poliomino di 1
s nella figura
0 0 1 1 1 0
1 1 1 1 0 0
1 1 0 0 0 0
non è L-convesso, poiché entrambi i percorsi a forma di L dal basso a sinistra 1
in alto a destra 1
contengono un 0
:
0>0>1>1>1 0
^ ^
1 1 1 1 0 0
^ ^
1>1>0>0>0 0
Tuttavia, il poliomino di 1
s in questa figura è L-convesso:
0 1 1 1 0 0
1 1 1 1 1 1
0 1 1 0 0 0
Ingresso
L'input è una matrice 2D di bit nel formato nativo della tua lingua o come stringa delimitata da nuova riga se la nostra lingua non dispone di array. È garantito che ne contenga almeno uno 1
.
Produzione
L'output deve essere un valore veritiero se l'insieme di 1
s è un poliomino L-convesso e in caso contrario un valore falsy. Questi output devono essere coerenti: è necessario generare lo stesso valore di verità per tutti gli input L-convessi e lo stesso valore di falsa per gli altri. Si noti che un set disconnesso di 1
s (che non è un poliomino) genera un output errato.
Regole e punteggio
È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard .
Casi test
Questi casi di test dovrebbero funzionare anche se si ruotano o si riflettono gli array o si aggiungono righe di 0
s a qualsiasi bordo.
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