Contexte
J'ai un tas d'images anciennes et granuleuses en noir et blanc. Certains d'entre eux représentent des vignes grimpant sur un mur, d'autres non - votre tâche est de les classer pour moi.
Entrée et sortie
Votre entrée est un tableau 2D rectangulaire de bits A , donné dans n'importe quel format pratique. Il ne sera pas vide, mais il n'est pas garanti qu'il contienne à la fois des 0 et des 1. Le tableau représente une vigne si les conditions suivantes sont réunies:
- La rangée inférieure de A contient au moins un 1. Ce sont les racines de la vigne.
- Chaque 1 dans A est connecté à la rangée inférieure par un chemin de 1 qui ne va que vers la gauche, la droite et le bas (pas vers le haut et pas en diagonale). Ces chemins sont les sarments de la vigne.
Votre sortie est une valeur véridique cohérente si l'entrée représente une vigne, et une valeur de fausseté cohérente sinon.
Exemples
Ce tableau représente une vigne:
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
Cette entrée ne représente pas une vigne, car il y a un 1 au milieu de la bordure droite qui n'est pas connecté aux racines par une branche:
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
Le tableau tout-0 ne représente jamais une vigne, mais le tableau tout-1 le fait toujours.
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites.
Cas de test
Entrées véridiques:
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
Entrées fausses:
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