Олимпиадный тренинг

Задача . 3. Робот


Задача

Темы:
В игре «Зажги свет» игрок управляет роботом, перемещающимся по клетчатому полю. Робот находится в одной из клеток поля и обращён лицом в сторону одной из четырёх соседних клеток. Робот может перемещаться в соседнюю клетку в направлении своего лица (F), поворачиваться в своей клетке на 90° направо (R) или налево (L), а также включать свет в клетке поля, в которой он находится (T). В скобках указаны обозначения соответствующих команд.
Приведём примеры исполнения команд «L», «R», «F».

Дано следующее поле, на котором закрашенные клетки являются непроходимыми (попытка движения в непроходимые клетки приводит к разрушению робота), а клетки, в которых нужно зажечь свет, отмечены звёздочками. Начальное положение робота помечено знаком « », и робот смотрит вниз (в направлении стрелки). ⬇

Попытка зажечь свет в клетке, не помеченной звёздочкой, приводит к аварийному завершению программы, но в клетке, в которой уже включён свет, разрешается его включать повторно.

Алгоритм действий робота представляет собой строку из нескольких команд «F», «R», «L», «T». Кроме того, несколько команд могут быть объединены в подпрограмму (P).

Подпрограмма – это последовательность команд, которую можно вызывать из основного алгоритма, указав только один символ «P».
Ответ должен быть записан в виде двух строк. Первая строка начинается с двух символов «P:» и содержит описание подпрограммы. После двоеточия в этой строке могут идти только символы «F», «R», «L», «T». Вторая строка начинается с двух символов «M:» и содержит описание основной программы. После двоеточия во второй строке могут идти все команды робота и команда вызова подпрограммы «P» – встретив эту команду, робот исполняет последовательность команд, записанных в первой строке после двоеточия. Сама по себе подпрограмма исполняется только в том случае, если в основном алгоритме встречается символ «P». Если в основном алгоритме не будет символов «P», команды подпрограммы не выполнятся ни разу. Пробелы, запятые, иные символы в записи алгоритма не используются.

Рассмотрим пример. Пусть дан алгоритм:
P:FFT
M:TPRPRP

В этом примере подпрограмма P перемещает робота вперёд на две клетки и включает свет в клетке, где остановился робот. В основном алгоритме робот включает свет в клетке и три раза последовательно вызывает подпрограмму, поворачивая между вызовами направо. В результате робот включит свет в четырёх углах квадрата со стороной 3 клетки. Вам необходимо составить алгоритм, содержащий как можно меньше символов в своей записи (а не в пути робота), учитывая описание подпрограммы и основной части алгоритма. Ответ должен быть записан в формате, приведённом выше. Если вы не хотите использовать подпрограмму, первая строка вашего ответа всё равно должна содержать символы «P:». Чем меньше символов будет использовано в вашем ответе, тем больше баллов вы получите (при условии правильного решения задачи).

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя