Ctrl K

Шарик и лунка

Сложная
Поле задано матрицей field: 0 — свободная клетка, 1 — стена. Края поля тоже работают как стены. В клетке start лежит шарик, в клетке hole — лунка. Шарик можно толкнуть вверх (u), вниз (d), влево (l) или вправо (r). Он катится в этом направлении, пока не упрётся в стену или край поля, и только после остановки его можно толкнуть снова. Если по пути шарик проходит через лунку, он падает в неё. Длина маршрута — число клеток, которые шарик прокатился (стартовая не считается, лунка считается). Верните строку из букв u, d, l, r — последовательность толчков, приводящую шарик в лунку по самому короткому маршруту. Если таких маршрутов несколько, верните строку, наименьшую в алфавитном порядке. Если в лунку попасть нельзя, верните "impossible".
Пример 1
field=[[0, 0, 0], [0, 1, 0], [0, 0, 0]], start=[0, 0], hole=[2, 2] → 'dr'

Есть два маршрута длиной 4: «вниз, вправо» (dr) и «вправо, вниз» (rd). Из них выбираем меньший по алфавиту — dr.

Пример 2
field=[[0, 0, 0, 0], [1, 1, 0, 1], [0, 0, 0, 0]], start=[0, 0], hole=[0, 2] → 'r'

Покатившись вправо, шар проходит через лунку и падает в неё, пройдя 2 клетки.

Пример 3
field=[[0, 1, 0], [0, 1, 0]], start=[0, 0], hole=[1, 2] → 'impossible'

Стена посередине отделяет левую колонку от правой, до лунки не добраться.

Ограничения
  • 1 ≤ m, n ≤ 100, где m и n — число строк и столбцов field
  • field[i][j] равно 0 или 1
  • start и hole — координаты [строка, столбец] свободных клеток внутри поля
  • start и hole не совпадают
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКратчайший путь катящегося шарика СредняяПерекрасить стрелки до выхода СложнаяСквозь стены в дальний угол СложнаяЗалы, открывающиеся по расписанию СложнаяЦепочки отношений Средняя
загружаем Python…
Вход
field=[[0, 0, 0], [0, 1, 0], [0, 0, 0]], start=[0, 0], hole=[2, 2]
Ожидается
'dr'

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