Мэтью любит решать головоломки. Всякий раз, когда ему удается решить один, он счастливо пропускает. В последнее время ему действительно нужно это сделать, поскольку метеорный поток открыл в земле кратеры и дыры, в которые он не хотел бы упасть.
Вам дана часть ландшафта, который Мэтью хочет пересечь, надеясь, что он прибудет здоровым в конце. Земля дана в метрах, причем каждый метр представляет собой либо нормальную землю, либо дыру. Когда он бежит, ему удается пересечь один метр за шаг; альтернатива - прыжки, которые пересекают четыре метра за шаг. Мэтью начинает в крайнем левом углу первого наземного метра и хочет добраться до последнего (но не дальше его - просто представьте бесконечную дыру за последним метром, указанным в ландшафте).
вход
Входные данные задаются в виде одной строки на стандартном входе и заканчиваются переводом строки. Линия состоит из либо dashes ( -
) или underscores ( _
), представляющих метр земли или скважины, соответственно. Пример ввода может быть:
----__--___---
Данный ландшафт имеет длину не менее одного и не более 30 метров и всегда начинается с земли.
Выход
Выходные данные выдаются на стандартный вывод и представляют собой последовательность команд перемещения для Мэтью, либо run ( R
), либо jump ( J
). Как отмечалось выше,
команда запуска заставляет Мэтью бежать на один метр, в то время как прыжки переносят его вперед ровно на четыре метра. Для приведенного выше примера возможно следующее движение:
RRJRJRR
который выглядит примерно так:
Если нет безопасного пути через ландшафт, то !
должен быть напечатан один восклицательный знак ( ).
Образцы входов
--------
----__--___---
-_______
-_-_-_-_-_-
-
Пример выходов
JRRR
RRJRJRR
!
!
(последний вывод пустой, так как никакого движения не требуется, но я думаю, Markdown не может разобрать это)
Заметка
Необходим только один возможный путь, поэтому выходные данные программы не обязательно должны точно соответствовать выходным данным примера. Пока дается решение, если оно существует, и каждая команда перемещения перемещается на землю, и в конце концов достигается последний метр, выходные данные действительны.
Дополнительный вывод по стандартной ошибке игнорируется.
Выигрышное условие
Самый короткий код выигрывает, как это принято в гольфе. В случае ничьей победит более раннее решение.
Контрольные примеры
Есть два сценария тестирования, содержащие идентичные тестовые случаи:
- Баш (Спасибо Вентеро )
- PowerShell
Вызов в обоих случаях: <test script> <my program> [arguments]
например, ./test ruby jumprun.rb
или ./test.ps1 ./jumprun.exe
.
Еще одна заметка
Эта задача была частью соревнования по гольфу, проводимого в моем университете в течение 2011-W24. Баллы и языки наших конкурсантов были следующими:
- 104 - Хаскелл
- 131 - Хаскелл
- 154 - С
- 170 - С
- 275 - VB.NET
- 286 - Общий Лисп
Наши собственные решения были
- 92 - Рубин
- 124 - PowerShell
./test.sh perl jump.pl
-./test.sh: line 42: syntax error near unexpected token 'done'
, под bash 3.2.48