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


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