В прямоугольнике есть одна горизонтальная стенка с...
Criado em: 3 de março de 2025
Criado em: 3 de março de 2025
В прямоугольнике есть одна горизонтальная стенка с проходом шириной в 1 клетку. Робот в клетке непосредственно под стенкой, проход — над роботом или слева от него. Робот должен обойти стенку и остановиться прямо над ней в клетке, симметричной исходной.
move_left()
Сделать шаг влево
move_right()
Сделать шаг вправо
move_up()
Сделать шаг вверх
move_down()
Сделать шаг вниз
fill_cell()
Закрасить клетку
free_from_up()
Проверить, свободно ли сверху
free_from_down()
Проверить, свободно ли снизу
free_from_left()
Проверить, свободно ли слева
free_from_right()
Проверить, свободно ли справа
wall_from_up()
Проверить, есть ли стена сверху
wall_from_down()
Проверить, есть ли стена снизу
wall_from_left()
Проверить, есть ли стена слева
wall_from_right()
Проверить, есть ли стена справа
cell_is_filled()
Проверить, закрашена ли клетка
cell_is_clean()
Проверить, чиста ли клетка
Ниже приведён один из самых простых универсальных вариантов решения, исходя из условия «проход либо сразу над роботом, либо левее». Логика такая:
Пример на «псевдокоде» с имеющимися функциями:
pythondef solve(): # Счётчик шагов, сделанных влево left_steps = 0 # Шаг 1: ищем проход сверху, двигаясь влево, пока сверху стена while wall_from_up(): move_left() left_steps += 1 # Шаг 2: как только сверху больше нет стены – это отверстие; поднимаемся на 2 клетки move_up() move_up() # Шаг 3: возвращаемся вправо на то же число клеток, что ушли влево for _ in range(left_steps): move_right()
Почему это работает:
wall_from_up()
с самого начала даст False, цикл «пока стена сверху» не выполнится, и робот просто сделает move_up()
, move_up()
(поднявшись сквозь отверстие), что приведёт его в симметричную клетку над исходной.Таким образом, робот гарантированно окажется ровно над исходной позицией, «обойдя» стенку.