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


Решение по шагам
6 шаговСначала Робот находится справа от верхнего конца левой вертикальной стены. Поднимаемся вверх, пока слева не появится свободный путь: это означает, что Робот обошёл верхний конец стены.
Переходим на клетку слева от стены. Двигаемся вниз, закрашивая клетки, пока справа находится стена. После выхода за нижний конец стены цикл завершается.
Двигаемся вправо под горизонтальной стеной до левой стороны правой вертикальной стены.
Двигаемся вверх, закрашивая клетки слева от правой вертикальной стены, пока справа находится стена.
Подходящий алгоритм:
нц пока не слева свободно
вверх
кц
влево
нц пока не справа свободно
закрасить
вниз
кц
нц пока справа свободно
вправо
кц
нц пока не справа свободно
закрасить
вверх
кц
нц пока не слева свободно; вверх; кц; влево; нц пока не справа свободно; закрасить; вниз; кц; нц пока справа свободно; вправо; кц; нц пока не справа свободно; закрасить; вверх; кц
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Закрашивание клеток справа от вертикальных стен вместо клеток слева.
Попытка двигаться сквозь стену после завершения одного из циклов.
Отсутствие команды закрасить перед выходом из цикла.
Использование фиксированного числа повторений вместо проверки положения относительно стены.