Reto
Dada una matriz binaria y una cadena binaria, determine si esa cadena binaria se puede encontrar comenzando en cualquier punto de la matriz y moviéndose en cualquier dirección en cualquier punto posterior para formar la cadena binaria. Es decir, ¿se puede encontrar la cadena doblada sin embargo dentro de la matriz?
La cadena solo se puede plegar a 90 grados o 180 grados (conexiones de borde; Manhattan Distancia 1) y no puede solaparse en ningún punto.
Ejemplo
Tomemos el siguiente ejemplo:
Matrix:
010101
111011
011010
011011
Snake: 0111111100101
Este es un caso de prueba de verdad. Podemos ver la serpiente doblada en la siguiente posición:
0-1 0 1 0 1
|
1 1 1-0 1 1
| | | |
0 1 1 0-1-0
| |
0 1-1 0 1 1
Reglas
- Se aplican lagunas estándar
- Puede tomar la longitud de la cadena y el ancho y alto de la matriz como entrada si lo desea
- Puede tomar la matriz binaria y la cadena binaria como una cadena multilínea / matriz de cadenas / cadena unida a nueva línea / cualquier otra cadena unida y una cadena
- Puede tomar las dimensiones como una matriz plana en lugar de varios argumentos
- Su programa debe finalizar para cualquier matriz de 5 x 5 con cualquier cadena de hasta 10 en menos de un minuto
Limitaciones
- La matriz no es necesariamente cuadrada
- La cadena no estará vacía.
- La cadena puede ser de longitud 1
- La cadena no contendrá más cuadrados de los disponibles (es decir,
len(string) <= width(matrix) * height(matrix)
Casos de prueba
Verdad
01010
10101
01010
10101
01010
0101010101010101010101010
01110
01100
10010
10110
01101
011111000110100
0
0
10
01
1010
100
010
001
100010001
Falsa
00000
00000
00000
00000
00000
1
10101
01010
10101
01010
10101
11
100
010
001
111
10001
01010
00100
01010
10001
1000100010001000101010100