Ctrl K

Побег с огромного поля

Сложная
Поле — квадрат из 10⁶ × 10⁶ клеток, клетка задаётся координатами [x, y], где 0 ≤ x, y < 10⁶. Некоторые клетки заняты стенами — они перечислены в walls. Робот стоит в клетке start и хочет попасть в клетку finish. За один ход он сдвигается на соседнюю по стороне клетку, если она не стена и не за пределами поля. Верните True, если робот может добраться до finish, и False иначе. Поле слишком велико, чтобы обходить его целиком: подумайте, сколько клеток вообще могут запереть всего 200 стен.
Пример 1
walls=[[1, 0], [1, 1], [0, 2]], start=[0, 0], finish=[5, 5] → False

Стены (1, 0), (1, 1), (0, 2) вместе с краем поля запирают клетки (0, 0) и (0, 1) — выйти из этого угла нельзя.

Пример 2
walls=[[3, 3], [3, 4], [4, 3]], start=[2, 2], finish=[4, 4] → True

Стены прикрывают finish только с двух сторон: к (4, 4) можно подойти через (5, 4) или (4, 5).

Пример 3
walls=[], start=[999999, 0], finish=[0, 999999] → True

Стен нет, так что дойти можно куда угодно.

Ограничения
  • 0 ≤ len(walls) ≤ 200
  • walls[i] = [x, y], 0 ≤ x, y < 10⁶
  • start и finish — пары [x, y], 0 ≤ x, y < 10⁶
  • start ≠ finish
  • Ни start, ни finish не являются стенами
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСемейства слов на один обмен СложнаяКого вылечить первым СложнаяКого отключить от сети СложнаяОстановить ветку процессов СредняяСклеить карточки контактов Средняя
загружаем Python…
Вход
walls=[[1, 0], [1, 1], [0, 2]], start=[0, 0], finish=[5, 5]
Ожидается
False

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 106 тестов на сервере, включая скрытые.