Ограничения: время – 200ms/500ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Напишите в Blockly программу для робота, который перемещает разноцветные диски трех различных размеров между тремя колышками.
Первый колышек красного цвета, второй -- жёлтого, третий -- зелёного. Первоначально все девять дисков находятся на первом колышке.
![width:200px|Пирамиды](50510.png)
После выполнения программы диски на колышках должны быть распределены по цвету (во всех подзадачах) -- на каждом
колышке только диски, совпадающие по цвету с цветом колышка -- и упорядочены по размеру (только в подзадачах 2 и 4) -- на каждом колышке
размеры дисков возрастают сверху вниз.
Для управления роботом вы можете использовать следующие блоки из категории "Робот".
![width:200px|Команды робота](50521.png)
Первый блок позволяет переместить диск с одного колышка на другой. Если диска на указанном колышке нет, то команда игнорируется.
Второй блок позволяет получить количество дисков на указанном колышке.
Третий и четвёртый блок позволяет узнать цвет и размер верхнего диска на указанном колышке.
Цвет возвращается как число от 1 до 3 (1 -- красный, 2 -- жёлтый, 3 -- зелёный), размер как число от 1 до 3.
Если на указанном колышке нет ни одного диска, то оба блока возвращают число 0.
Например, для перемещения трёх верхних дисков можно выполнить следующую программу:
![width:170px|Пример программы](50519.png)
Следующие блоки находятся в категории "Управление".
![width:120px|Команды робота](50513.png)
Первые два блока позволяют выбрать выполняемую группу
блоков в зависимости от условия. В настройках блока (символ шестеренки) можно добавить или убрать дополнительные ветки выбора.
После завершения настройки нужно повторно нажать на символ шестерёнки.
Третий блок позволяет задать число как аргумент для какого-либо блока.
Четвертый блок позволяет сравнить два значения.
Пятый и шестой блоки позволяют задавать сложные условия, используя логические операции И, ИЛИ, НЕ.
![width:150px|Команды робота](50511.png)
Седьмой блок позволяет повторять некоторую группу блоков, пока условие истинно.
Например, для перемещения шести верхних дисков можно написать программу
![width:300px|Пример программы](50512.png)
В этой программе две похожих группы блоков, за исключением двух констант.
Упростить программу поможет блок из категории "Функции".
![width:200px|Команды робота](50509.png)
После вставки блока и изменения имени
нужно щелкнуть символ шестеренки и добавить параметры n и k.
![width:250px|Команды робота](50515.png)
После завершения настройки нужно повторно нажать на символ шестерёнки.
Добавленные параметры появятся в категории "Переменные" и их можно будет использовать в блоках вместо констант:
![width:350px|Команды робота](50517.png)
Созданная функция появляется в категории "Функция" и её можно добавить в программу, указав значения для
параметров с помощью блока-числа из категории "Управление":
![width:150px|Пример программы](50516.png)
Для запуска программы используйте кнопки:
![Кнопки](50508.png)
Первая кнопка позволяет отправить ваше решение для проверки в проверяющую систему соревнований, вторая кнопка выполняет запуск программу локально, третья –
пошаговое выполнение или временная остановка программы, четвертая -- завершение выполнения программы, после которой программа будет выполняться сначала.
Например, после запуска на выполнение программы, показанной выше, состояние поля изменится на
![width:200px|Пирамиды](50518.png)
В поле "Начальное состояние" можно задать начальный порядок дисков. При нажатии
левой кнопкой мыши на диск, этот диск переставляется на вершину первого колышка.
*Система оценки и описание подзадач*
||.u|Подзадача 1 (10 баллов)||
В этой подзадаче 1 тест, с начальным расположением дисков, показанным на рисунке.
![width:200px|Пирамиды](50514.png)
Необходимо разложить диски по цветам -- на колышке 1 должны быть диски только цвета 1 (красного),
на колышке 2 -- только цвета 2 (жёлтого), на колышке 3 -- только цвета 3 (зелёного).
В каком порядке расположены диски по размерам, не имеет значения.
||.u|Подзадача 2 (10 баллов)||
Необходимые подзадачи: 1.
В этой подзадаче 1 тест, показанный на рисунке.
![width:200px|Пирамиды](50514.png)
Необходимо разложить диски по цветам и размерам так, чтобы конечное состояние совпало с расположением на рисунке:
![width:200px|Пирамиды](50520.png)
||.u|Подзадача 3 (50 баллов)||
Необходимые подзадачи: 1.
Девять дисков расположены на первом колышке. Необходимо разложить диски по цветам -- на колышке 1 должны быть диски только
цвета 1 (красного), на колышке 2 -- только цвета 2 (жёлтого), на колышке 3 -- только цвета 3 (зелёного).
В каком порядке расположены диски по размерам, не имеет значения.
В этой подзадаче 5 тестов, каждый тест оценивается в 10 баллов. Баллы за каждый тест начисляются независимо.
||.u|Подзадача 4 (30 баллов)||
Необходимые подзадачи: 1,2,3.
Девять дисков расположены на первом колышке. Необходимо разложить диски по цветам и размерам (см. рисунок выше).
В этой подзадаче 6 тестов, каждый тест оценивается в 5 баллов. Баллы за каждый тест начисляются независимо.
По запросу сообщается результат окончательной проверки на каждом тесте.
---
Для написания программы для робота используется [специальная версия среды Blockly](blockly/2788.html).
Вы можете использовать полную среду Blockly при решении других задач этого соревнования, выбрав пункт Blockly
в информационном меню задачи.