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


Решение по шагам
5 шаговРобот находится в клетке у левого края нижней стены. Закрасим её, а затем будем подниматься вверх и закрашивать каждую клетку, пока сверху нет стены.
После остановки Робот окажется в клетке непосредственно под верхней стеной у её левого края. Будем двигаться вправо, пока над Роботом находится верхняя стена и справа есть свободная клетка.
Когда Робот достигнет клетки под правым краем верхней стены, закрасим её. Условие движения вправо не позволит уйти за конец стены.
Один из корректных алгоритмов:
закрасить
нц пока сверху свободно
вверх
закрасить
кц
нц пока (не сверху свободно) и (справа свободно)
вправо
кц
закрасить
закрасить
нц пока сверху свободно
вверх
закрасить
кц
нц пока (не сверху свободно) и (справа свободно)
вправо
кц
закрасить
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Не закрашивают исходную клетку у левого края нижней стены.
Закрашивают клетки во время движения вправо, хотя требуется закрасить только клетку под правым краем верхней стены.
Продолжают движение вправо без проверки, что сверху находится стена.
Перемещаются вверх или вправо без проверки свободы соответствующего направления.