Решение: Закрашивание клеток над стеной
На бесконечном поле имеется длинная горизонтальная стена неизвестной длины. Робот находится в одной из клеток непосредственно сверху от стены, но его начальное положение неизвестно. Напишите алгоритм для Робота, закрашивающий все клетки, расположенные выше стены и прилегающие к ней, независимо от размера стены и начального расположения Робота.


Робот должен закрасить только клетки, удовлетворяющие заданному условию. Конечное расположение Робота может быть произвольным. Алгоритм должен завершиться, не допустив разрушения Робота, и работать для любого допустимого начального положения.
Решение по шагам
6 шаговВо всех клетках, расположенных непосредственно над стеной, проход вниз закрыт. Поэтому условие «не снизу свободно» позволяет определить, что Робот находится над стеной.
Робот перемещается влево, пока слева есть свободная клетка и он всё ещё находится над стеной. Так Робот достигает самой левой клетки требуемого ряда.
Левая крайняя клетка закрашивается. После этого Робот перемещается вправо и закрашивает каждую следующую клетку, пока снизу находится стена.
Когда Робот дойдёт до правого конца стены, снизу следующей клетки будет свободно, поэтому цикл завершится. Все нужные клетки закрашены, а столкновения со стеной не происходит.
Алгоритм исполнителя Робот:
нц пока (слева свободно) и (не снизу свободно)
влево
кц
закрасить
нц пока (справа свободно) и (не снизу свободно)
вправо
закрасить
кц
нц пока (слева свободно) и (не снизу свободно)
влево
кц
закрасить
нц пока (справа свободно) и (не снизу свободно)
вправо
закрасить
кц
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Начинать движение вправо, не найдя левый конец стены.
Перемещаться вниз или использовать команду движения сквозь стену.
Проверять только наличие свободной клетки справа и не учитывать условие «не снизу свободно».
Не закрасить левую крайнюю клетку перед началом движения вправо.
Использовать цикл без условия, гарантирующего завершение алгоритма.