Стратегия: зигзагообразная прокраска по рядам (snake). Робот идёт вдоль текущего ряда, закрашивает каждую клетку, доходит до стены, спускается на следующий ряд и меняет направление. Так мы покроем все клетки прямоугольника без необходимости хранить карту размеров.
Как реализовать (упрощённый псевдокод с вашими командами)
- Начало: закрасьте текущую клетку.
- Направление движения по ряду: вправо (right) или влево (left). Изначально пусть будет вправо.
Псевдокод:
- fill_cell
- dir = "right"
- while True: if dir == "right": while not wall_from_right: move_right fill_cell if not wall_from_down: move_down fill_cell dir = "left" else: break // достигли нижнего края, всё закрашено else: // dir == "left" while not wall_from_left: move_left fill_cell if not wall_from_down: move_down fill_cell dir = "right" else: break // достигли нижнего края, всё закрашено
После выхода из цикла всё прямоугольное поле закрашено. Останавливайтесь тогда, когда закончите последний нижний ряд (когда ниже стены).
Несколько замечаний
- Если начальная клетка не закрашена, сначала выполните fill_cell.
- Этот подход не требует знания размеров прямоугольника и работает для любого начального положения внутри границ.
- Если нужно, можно вынести логику в функцию "раскраска_рядом" и вызывать её в обеих направлениях.
Хотите, чтобы я дал готовый код на конкретном языке (например, Python-подобный псевдокод или псевдокод с точной последовательностью команд)?