Défi
Étant donné une matrice binaire et une chaîne binaire, déterminez si cette chaîne binaire peut être trouvée en commençant à n'importe quel point de la matrice et en se déplaçant dans n'importe quelle direction à tout point suivant pour former la chaîne binaire. Autrement dit, la chaîne peut-elle être trouvée repliée à l'intérieur de la matrice?
La chaîne ne peut être pliée qu'à 90 degrés ou 180 degrés (connexions latérales; Manhattan Distance 1) et ne peut se chevaucher à aucun moment.
Exemple
Prenons l'exemple suivant:
Matrix:
010101
111011
011010
011011
Snake: 0111111100101
Ceci est un cas de test véridique. On peut voir le serpent replié dans la position suivante:
0-1 0 1 0 1
|
1 1 1-0 1 1
| | | |
0 1 1 0-1-0
| |
0 1-1 0 1 1
Règles
- Les échappatoires standard s'appliquent
- Vous pouvez prendre la longueur de la chaîne et la largeur et la hauteur de la matrice en entrée si vous le souhaitez
- Vous pouvez prendre la matrice binaire et la chaîne binaire comme une chaîne multiligne / un tableau de chaînes / une chaîne jointe à une nouvelle ligne / toute autre chaîne jointe à une autre et une chaîne
- Vous pouvez prendre les dimensions comme un tableau plat au lieu de plusieurs arguments
- Votre programme doit se terminer pour n'importe quelle matrice 5 x 5 avec une chaîne d'une longueur maximale de 10 en moins d'une minute
Limites
- La matrice n'est pas nécessairement carrée
- La chaîne sera non vide
- La chaîne peut avoir une longueur de 1
- La chaîne ne contiendra pas plus de carrés que disponible (c'est-à-dire,
len(string) <= width(matrix) * height(matrix)
Cas de test
Vérité
01010
10101
01010
10101
01010
0101010101010101010101010
01110
01100
10010
10110
01101
011111000110100
0
0
10
01
1010
100
010
001
100010001
Falsy
00000
00000
00000
00000
00000
1
10101
01010
10101
01010
10101
11
100
010
001
111
10001
01010
00100
01010
10001
1000100010001000101010100