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