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