Wyzwanie
Biorąc pod uwagę macierz binarną i ciąg binarny, określ, czy ten ciąg binarny można znaleźć, zaczynając w dowolnym punkcie macierzy i poruszając się w dowolnym kierunku w dowolnym kolejnym punkcie, tworząc ciąg binarny. To znaczy, czy można znaleźć zwinięty sznurek wewnątrz matrycy?
Sznurek można złożyć tylko pod kątem 90 stopni lub 180 stopni (połączenia krawędzi; Manhattan Odległość 1) i nie może zachodzić na siebie w żadnym punkcie.
Przykład
Weźmy następujący przykład:
Matrix:
010101
111011
011010
011011
Snake: 0111111100101
To jest prawdziwy przypadek testowy. Widzimy węża złożonego w następującej pozycji:
0-1 0 1 0 1
|
1 1 1-0 1 1
| | | |
0 1 1 0-1-0
| |
0 1-1 0 1 1
Zasady
- Obowiązują standardowe luki
- Możesz wziąć długość łańcucha oraz szerokość i wysokość matrycy jako dane wejściowe, jeśli chcesz
- Możesz wziąć macierz binarną i ciąg binarny jako ciąg wieloliniowy / tablicę ciągów / ciąg połączony z nową linią / ciąg połączony z czymkolwiek innym i ciąg
- Możesz wziąć wymiary jako płaską tablicę zamiast kilku argumentów
- Twój program musi zakończyć się dla dowolnej matrycy 5 x 5 z dowolnym łańcuchem o długości do 10 w niecałą minutę
Ograniczenia
- Macierz niekoniecznie jest kwadratowa
- Ciąg nie będzie pusty
- Ciąg może mieć długość-1
- Ciąg nie będzie zawierał więcej kwadratów niż dostępnych (to znaczy,
len(string) <= width(matrix) * height(matrix)
Przypadki testowe
Prawda
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