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


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