Herausforderung
Bestimmen Sie anhand einer Binärmatrix und einer Binärzeichenfolge, ob diese Binärzeichenfolge an einem beliebigen Punkt in der Matrix gefunden werden kann und sich an einem beliebigen nachfolgenden Punkt in eine beliebige Richtung bewegt, um die Binärzeichenfolge zu bilden. Das heißt, kann die Zeichenfolge jedoch innerhalb der Matrix zusammengefaltet gefunden werden?
Die Saite kann nur um 90 Grad oder 180 Grad gefaltet werden (Kantenverbindungen; Manhattan Distance 1) und darf sich an keiner Stelle überlappen.
Beispiel
Nehmen wir das folgende Beispiel:
Matrix:
010101
111011
011010
011011
Snake: 0111111100101
Dies ist ein wahrer Testfall. Wir können die gefaltete Schlange in der folgenden Position sehen:
0-1 0 1 0 1
|
1 1 1-0 1 1
| | | |
0 1 1 0-1-0
| |
0 1-1 0 1 1
Regeln
- Es gelten Standardlücken
- Sie können die Länge der Zeichenfolge und die Breite und Höhe der Matrix als Eingabe verwenden, wenn Sie möchten
- Sie können die Binärmatrix und die Binärzeichenfolge als eine mehrzeilige Zeichenfolge / ein Array von Zeichenfolgen / eine durch Zeilenumbruch verbundene Zeichenfolge / eine beliebige andere verbundene Zeichenfolge und eine Zeichenfolge annehmen
- Sie können die Dimensionen als flaches Array anstelle mehrerer Argumente verwenden
- Ihr Programm muss für jede 5 x 5-Matrix mit einer Zeichenfolge von bis zu 10 in weniger als einer Minute abgeschlossen sein
Einschränkungen
- Die Matrix ist nicht unbedingt quadratisch
- Die Zeichenfolge ist nicht leer
- Die Zeichenfolge kann die Länge 1 haben
- Die Zeichenfolge enthält nicht mehr Quadrate als verfügbar (d. H.
len(string) <= width(matrix) * height(matrix)
Testfälle
Wahrheit
01010
10101
01010
10101
01010
0101010101010101010101010
01110
01100
10010
10110
01101
011111000110100
0
0
10
01
1010
100
010
001
100010001
Falsch
00000
00000
00000
00000
00000
1
10101
01010
10101
01010
10101
11
100
010
001
111
10001
01010
00100
01010
10001
1000100010001000101010100