Desafio
Dada uma matriz binária e uma cadeia binária, determine se essa cadeia binária pode ser encontrada iniciando em qualquer ponto da matriz e movendo-se em qualquer direção em qualquer ponto subsequente para formar a cadeia binária. Ou seja, a corda pode ser encontrada dobrada, porém dentro da matriz?
A corda só pode ser dobrada a 90 graus ou 180 graus (conexões de borda; Distância 1 de Manhattan) e não pode se sobrepor a qualquer momento.
Exemplo
Vamos dar o seguinte exemplo:
Matrix:
010101
111011
011010
011011
Snake: 0111111100101
Este é um caso de teste de verdade. Podemos ver a cobra dobrada na seguinte posição:
0-1 0 1 0 1
|
1 1 1-0 1 1
| | | |
0 1 1 0-1-0
| |
0 1-1 0 1 1
Regras
- As brechas padrão se aplicam
- Você pode usar o comprimento da string e a largura e altura da matriz como entrada, se desejar
- Você pode pegar a matriz binária e a cadeia binária como uma cadeia multilinha / matriz de cadeias / cadeia associada a nova linha / qualquer outra coisa associada a cadeia e uma cadeia
- Você pode tomar as dimensões como uma matriz plana em vez de vários argumentos
- Seu programa deve ser finalizado para qualquer matriz 5 x 5 com qualquer sequência de comprimento 10 em menos de um minuto
Limitações
- A matriz não é necessariamente quadrada
- A sequência não ficará vazia
- A cadeia pode ter o comprimento 1
- A sequência não conterá mais quadrados do que o disponível (ou seja,
len(string) <= width(matrix) * height(matrix)
Casos de teste
Truthy
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