Виклик
З огляду на двійкову матрицю та двійкову рядок, визначте, чи можна знайти цю двійкову рядок, починаючи в будь-якій точці матриці та рухаючись у будь-якому напрямку в будь-якій наступній точці, щоб утворити двійковий рядок. Тобто, чи можна знайти рядок складеною всередині матриці?
Струна може бути складена лише при 90 градусах або 180 градусах (крайові з'єднання; відстань Манхеттена 1) і не може перекриватися в будь-якій точці.
Приклад
Візьмемо такий приклад:
Matrix:
010101
111011
011010
011011
Snake: 0111111100101
Це справжній тестовий випадок. Ми можемо бачити змію, складену в наступному положенні:
0-1 0 1 0 1
|
1 1 1-0 1 1
| | | |
0 1 1 0-1-0
| |
0 1-1 0 1 1
Правила
- Застосовуються стандартні лазівки
- Якщо ви хочете, ви можете взяти довжину рядка та ширину та висоту матриці як вхідні дані
- Ви можете приймати двійкову матрицю та двійкову рядок як багаторядковий рядок / масив рядків / рядок, що приєднався до нового рядка / будь-що інше, об'єднаний рядок та рядок
- Ви можете приймати параметри як плоский масив замість кількох аргументів
- Ваша програма повинна закінчувати будь-яку матрицю 5 x 5 з будь-яким рядком довжиною до 10 за менше хвилини
Обмеження
- Матриця не обов'язково квадратна
- Рядок буде не порожнім
- Рядок може бути довжиною-1
- Рядок не буде містити більше квадратів, ніж доступних (тобто
len(string) <= width(matrix) * height(matrix)
Випробування
Truthy
01010
10101
01010
10101
01010
0101010101010101010101010
01110
01100
10010
10110
01101
011111000110100
0
0
10
01
1010
100
010
001
100010001
Фальсі
00000
00000
00000
00000
00000
1
10101
01010
10101
01010
10101
11
100
010
001
111
10001
01010
00100
01010
10001
1000100010001000101010100