printРабочее место участника

printЗадачи

2469. Робот-маляр

Ограничения: время – 200ms/500ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Напишите программу для робота, который движется по области из 12 разноцветных полей и может их перекрашивать в различные цвета. Первоначально робот всегда находится на поле с номером 1.
42102.png
После выполнения программы роботом количество красных, жёлтых и зелёных полей должно стать одинаковым (по 4 поля каждого цвета). Робот должен использовать наименьшее количество краски, учитывая факт, что часть полей уже имеют нужный цвет. В примере на рисунке робот может покрасить поле 5 в красный цвет, а поле 6 – в жёлтый.
Для управления роботом могут использоваться следующие команды:
42101.png
Команды движения позволяют перейти роботу на соседнее поле влево или вправо. Если выполнение команды движения невозможно, то она игнорируется.
Следующая группа команд позволяют перекрасить поле, на котором находится робот, в указанный цвет. Робот может красить поле несколько раз, в том числе текущим цветом этого поля.
Следующая группа команд, которую можно использовать в логических блоках, позволяет проверить цвет текущего поля.
Последняя команда возвращает номер текущего поля.
Система оценки и описание подзадач
Подзадача 1 (30 баллов)
Программа должна помочь роботу, когда все поля имеют одинаковый цвет (красный, жёлтый или зелёный).
В этой подзадаче 3 теста, каждый тест оценивается в 10 баллов. Баллы за каждый тест начисляются независимо.
Подзадача 2 (70 баллов)
Поля могут иметь любой цвет из трёх.
Необходимые подзадачи: 1.
В этой подзадаче 7 тестов, каждый тест оценивается в 10 баллов. Баллы за каждый тест начисляются независимо.
По запросу сообщается результат окончательной проверки на каждом тесте.

Для написания программы для робота используется специальная версия среды Blockly. Вы можете использовать полную среду Blockly при решении других задач этого соревнования, выбрав пункт Blockly в информационном меню задачи.
Рассмотрим процесс создания программы в Blockly на примере покраски полей в два цвета (6 красных и 6 жёлтых).
Сначала нам потребуется переменная kr, в которой будем хранить количество полей красного цвета. Для создания переменной в категории "Переменные" нужно щелкнуть по кнопке "Создать переменную" и ввести её название.
42106.png
После этого в категории "Переменные" появятся блоки для получения и изменения значения переменной.
Для подсчета количества красных полей необходимо пройти по всем полям и увеличивать переменную kr при обнаружении красного поля.
42105.png
При обратном движении нужно перекрашивать поля, если количество красных полей отличается от 4. Для этого действия потребуется изменить условный блок, нажав на символ шестерёнки в левом верхнем углу блока.
42104.png
После завершения настройки блока нужно повторно нажать на символ шестерёнки.
Результирующая программа для робота выглядит следующим образом:
42103.png
Для проверки работы используйте кнопки:
42100.png
Первая кнопка позволяет отправить ваше решение для проверки в проверяющую систему соревнований, вторая кнопка выполняет запуск программу локально, третья – пошаговое выполнение или временная остановка программы, четвертая – завершение выполнения программы, после которой программа будет выполняться сначала.
Щелкая мышкой по полям рабочей области, можно задать начальную раскраску полей для тестирования.
loading