Исполнитель Робот умеет перемещаться по лабиринту, начерченному на плоскости, разбитой на клетки. Между соседними (по сторонам) клетками может стоять стена, через которую Робот не пройдет. У Робота есть девять команд. Четыре команды — это команды-приказы:
вверх вниз влево вправо
При выполнении любой из этих команд Робот перемещается на одну клетку соответственно: вверх ↑ вниз ↓, влево ← , вправо →. Если Робот получит команду передвижения сквозь стену, то он разрушится. Также у Робота есть команда закрасить, при которой закрашивается клетка, в которой Робот находится в настоящий момент.
Еще четыре команды — это команды проверки условий. Эти команды проверяют, свободен ли путь для Робота в каждом из четырех возможных направлений:
сверху свободно снизу свободно слева свободно справа свободно
Эти команды можно использовать вместе с условием если, имеющим следующий вид:
если условие то последовательность команд все
Здесь условие — одна из команд проверки условия. Последовательность команд — это одна или несколько любых команд-приказов. Например, для передвижения на одну клетку вправо, если справа нет стенки, и закрашивания клетки можно использовать такой алгоритм:
если справа свободно то вправо закрасить все
В одном условии можно использовать несколько команд проверки условий, применяя логические связки и, или, не, например:
если (справа свободно) и (не снизу свободно) то вправо все
Для повторения последовательности команд можно использовать цикл пока, имеющий следующий вид:
нц пока условие последовательность команд кц
Например, для движения вправо, пока это возможно, можно использовать следующий алгоритм:
нц пока справа свободно вправо кц
Выполните задание.
На бесконечном поле расположена одна непрерывная ступенчатая стена без проходов, образующая впадину. При обходе стены от левого конца вправо её участки идут в следующем порядке: вправо, вниз, вправо, вниз, вправо (дно), вверх, вправо, вверх, вправо, вверх. Длины всех участков неизвестны и составляют положительное целое число клеток. Робот находится непосредственно над левым концом первого горизонтального участка. Других стен нет.
На рисунке указан один из возможных способов расположения стен и Робота (Робот обозначен буквой «Р»).
Напишите для Робота алгоритм, закрашивающий путь от левого края дна впадины к клетке непосредственно слева от нижнего конца последнего вертикального участка. Путь проходит внутри впадины так: сначала вдоль дна вправо до стены, затем вверх вдоль стены до первой клетки, из которой можно пройти вправо; далее вправо до стены, снова вверх до первой клетки со свободным проходом вправо и вправо до последнего вертикального участка. Закрасить нужно все клетки этого пути, включая начальную, конечную и клетки поворотов. Клетки на спуске к дну и остальные клетки закрашивать нельзя. На следующем рисунке показан результат для приведённого примера.
При исполнении алгоритма Робот не должен разрушиться, выполнение алгоритма должно завершиться. Конечное расположение Робота может быть произвольным.
Алгоритм должен решать задачу для любых размеров участков стены и положений проходов, допускаемых условием. Алгоритм может быть выполнен в среде формального исполнителя или записан в текстовом редакторе.
Сохраните алгоритм в формате программы Кумир или в текстовом файле. Название файла и каталог для сохранения Вам сообщат организаторы экзамена.