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


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