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