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

printЗадачи

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

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

Вам нужно написать программу для робота-маляра, который должен покрасить забор по образцу, заданному цветами двух первых досок забора. Остальные доски забора не окрашены. Всего в заборе от 4 до 100 досок.
Программа состоит из набора инструкций следующего вида:
состояние_робота текущий_цвет новый_цвет направление новое_состояние
где состояние_робота и новое_состояние – числа от 0 до 9, текущий_цвет и новый_цвет – символ R (красный), G (зеленый), B (синий), ? (неокрашенная доска, только для текущий_цвет) или _ (любой текущий цвет или отсутствие окраски, сохранение текущего состояния доски), направление – символ < (переход к предыдущей доске забора) или > (переход к следующей доске забора). Параметры инструкции отделяются друг от друга ровно одним пробелом.
В начале работы робот находится на первой доске забора и имеет состояние 0. Далее на каждом шаге он ищет, начиная с первой строки, инструкцию в программе, соответствующую текущему состоянию робота и текущему цвету доски. Если такой инструкции нет, то робот прекращает работу. Если инструкция найдена, робот перекрашивает доску забора в новый_цвет (если новый цвет – символ _, то робот оставляет доску без изменений), изменяет свое состояние на новое_состояние и переходит к предыдущей или следующей доске забора, в зависимости от параметра направление. Если робот выходит при этом за пределы забора, то он прекращает работу.
Пример программы для робота, который распознает образцы RR и RB:
0 R _ > 0
0 B _ > 1
0 ? R > 0
1 ? R > 2
2 _ B > 1
25 баллов вы можете получить за модификацию этой программы, которая может обработать все образцы из красного и синего цветов: RR, RB, BB и BR.
100 баллов вы можете получить за универсальную программу, которая может обработать все 9 образцов из красного, зеленого и синего цветов.
В качестве решения вы должны выслать программу для робота.
loading