Решение: Закрашивание под стеной
Исполнитель Робот перемещается по бесконечному клетчатому полю. Между соседними клетками могут находиться стены, через которые Робот пройти не может. Робот находится в одной из клеток, расположенных над верхней горизонтальной стеной, рядом с ней. На поле имеются две одинаковые вертикальные стены и одна горизонтальная, соединяющая их верхние концы. Длины стен неизвестны. Напишите алгоритм, закрашивающий все клетки, расположенные непосредственно под горизонтальной стеной. Робот должен закрасить только клетки, удовлетворяющие этому условию. Алгоритм должен работать при любом допустимом размере и расположении стен, не приводить к разрушению Робота и завершаться.
Решение по шагам
4 шагаПока снизу нет стены, Робот находится над горизонтальной стеной. Двигаем его влево до внешней стороны левой вертикальной стены.
С внешней стороны спускаемся вниз. Пока справа находится левая вертикальная стена, путь вправо закрыт. Когда стена закончится, справа будет свободно.
Переходим вправо, внутрь области между вертикальными стенами, и поднимаемся до клетки непосредственно под горизонтальной стеной.
Закрашиваем первую клетку и движемся вправо, закрашивая каждую клетку, пока справа свободно. Последняя клетка находится непосредственно под правым концом горизонтальной стены.
нц пока снизу не свободно
влево
кц
нц пока справа не свободно
вниз
кц
вправо
нц пока сверху свободно
вверх
кц
закрасить
нц пока справа свободно
вправо
закрасить
кц
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Начать движение вправо до выхода ниже вертикальной стены.
Подниматься до горизонтальной стены, не проверяя условие «сверху свободно».
Закрашивать клетку после выхода за правую вертикальную стену.
Использовать безусловное движение через стену.