Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3473148
А
Аноним
17 октября 2025 14:44 · публичный вопрос
А
Аноним

Робот где-то в прямоугольнике. Нужно покрасить все его клетки. Остановиться можно где угодно. move_left Сделать шаг влево move_right Сделать шаг вправо move_up Сделать шаг вверх…

Запрос пользователя

Робот где-то в прямоугольнике. Нужно покрасить все его клетки. Остановиться можно где угодно. move_left Сделать шаг влево move_right Сделать шаг вправо move_up Сделать шаг вверх move_down Сделать шаг вниз fill_cell Закрасить клетку free_from_up Проверить, свободно ли сверху free_fram_down Проверить, свободно ли СНИзУ free_from _left Проверить, свободно ли слева free_from_right Проверить, свободно ли справа wall_from_up Проверить, есть ли стена сверху wall_from_down Проверить, есть ли стена СНИЗу wall_from_left Проверить, есть ли стена слева wall_from _right Проверить, есть ли стена справа cell_is filled Проверить, • закрашена ли клетка cell_is_clean Проверить, чиста ли клетка

Ответ нейросети
17 октября 2025 14:44

Стратегия: зигзагообразная прокраска по рядам (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-подобный псевдокод или псевдокод с точной последовательностью команд)?