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