Contexte
Un polyomino est appelé L-convexe , s'il est possible de se déplacer d'une tuile à n'importe quelle autre par un chemin en forme de L, c'est-à-dire un chemin qui va dans les directions cardinales et change de direction au plus une fois. Par exemple, le polyomino de 1
s dans la figure
0 0 1 1 1 0
1 1 1 1 0 0
1 1 0 0 0 0
n'est pas convexe en L, car les deux trajets en forme de L du bas à gauche 1
vers le haut à droite 1
contiennent 0
:
0>0>1>1>1 0
^ ^
1 1 1 1 0 0
^ ^
1>1>0>0>0 0
Cependant, le polyomino de 1
s dans cette figure est L-convexe:
0 1 1 1 0 0
1 1 1 1 1 1
0 1 1 0 0 0
Contribution
Votre entrée est un tableau 2D de bits au format natif de votre langue, ou en tant que chaîne délimitée par des sauts de ligne si notre langue manque de tableaux. Il est garanti d'en contenir au moins un 1
.
Production
Votre sortie doit être une valeur véridique si l'ensemble de 1
s est un polyomino L-convexe, et une valeur fausse dans le cas contraire. Ces sorties doivent être cohérentes: vous devez sortir la même valeur véridique pour toutes les entrées L-convexes, et la même valeur fausse pour les autres. Notez qu'un ensemble déconnecté de 1
s (qui n'est pas un polyomino) entraîne une sortie fausse.
Règles et notation
Vous pouvez écrire soit un programme complet soit une fonction. Le nombre d'octets le plus bas gagne et les failles standard sont interdites.
Cas de test
Ces cas de test devraient également fonctionner si vous faites pivoter ou réfléchissez les tableaux, ou si vous ajoutez des lignes de 0
s à n'importe quelle bordure.
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