RoboCritters ( этимология ) - это совершенно новый эзотерический язык программирования (не ищите его, я только что изобрел его). Это вариант из Brainfuck (BF), несколько более сложным , чем обычные схемы замещения оператора. Каждая программа в RoboCritters представляет собой прямоугольную сетку текста, которая содержит только семь символов . []/\|, а также новые строки для формирования сетки.
Пример программы RoboCritters:
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
Чтобы перевести программу RoboCritters в BF, посмотрите на каждый не-символ новой строки в сетке в обычном порядке чтения (слева направо, затем сверху вниз), например |\/||./|[]||[..][][] ||/\|[..][..][..] \/\/.
Если раздел сетки 4 × 2, идущий вправо и вниз от текущего символа, точно соответствует одному из восьми перечисленных ниже критериев робота , добавьте соответствующую команду BF ( ><+-.,[]) к (изначально пустой) программе BF.
Если участок сетки 4 × 2 не соответствует ни одному из объектов-роботов или выходит за границы , в программу BF ничего не добавляется.
Joybot,
>команда:[..] \][/Calmbot,
<команда:[..] /][\Squidbot,
+команда:[..] //\\Spiderbot,
-команда:[..] ||||Баннибот,
.команда:[][] [..]Зубной бот,
,команда:[..] |/\|Foxbot,
[команда:|\/| [..]Batbot,
]команда:[..] \/\/
Итак, читая пример программы
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
мы можем видеть, что сначала мы сталкиваемся с Foxbot (в столбце 1, строка 1), затем с Toothbot (c1, r2), затем с Bunnybot (c5, r2) и, наконец, с Batbot (c9, r3). Это соответствует программе BF [,.].
Обратите внимание, что Foxbot и Toothbot перекрываются. Это намеренно; роботы-твари не интерпретируются по-разному, когда они перекрываются .
Вызов
Напишите самую короткую возможную программу, которая принимает программу RoboCritters и выводит ее эквивалент BF. Вам не нужно запускать BF или проверять его действительность, только перевод кода RoboCritters в код BF.
Детали
Все входные программы RoboCritters будут действительны, то есть они будут точно прямоугольным блоком текста, содержащим только семь символов
. []/\|, плюс символы новой строки для его формирования. Новые строки могут быть в любом удобном общем представлении . При желании вы можете предположить, что программы имеют один завершающий перевод строки.Вы должны поддерживать программы RoboCritters размером менее 4 × 2, включая пустую (или одну новую строку) программу 0 × 0. Все они соответствуют пустой программе BF (пустой строке).
Выходная программа BF должна представлять собой строку из одной строки, содержащую только восемь символов команды BF
><+-.,[]. При желании может быть один завершающий символ новой строки.Возьмите ввод любым обычным способом (stdin / text file / command line) и выведите на stdout или ближайшую альтернативу вашего языка.
Вместо программы вы можете написать функцию, которая принимает программу RoboCritters как строку и печатает или возвращает строку программы BF.
Примеры
Вход: (вариант примера выше)
|\/|[][] [..][][] |/\|[..] \/\/Выход:
[,.]Вход: (тестирует всех роботов-тварей)
[..][[[[[..]]. ]|\/| \][/[..]//\\[..][..] [..]/][\[][]|/\|[..] ||||/\| [..]| |\/\/Выход:
>+[<,-.]Входные данные:
[..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [][] [][] [..] [..] [..] [][] [..] [..] [][] [..] [..] [][] [..] [][] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [][] [..] [..] [..] [][] //\\ //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ /][\ /][\ /][\ /][\ |||| \/\/ \][/ //\\ \][/ //\\ \][/ |||| \][/ \][/ //\\ [..] /][\ \/\/ /][\ |||| \/\/ \][/ \][/ [..] \][/ |||| |||| |||| [..] //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] [..] //\\ //\\ //\\ [..] \][/ \][/ [..] /][\ |||| [..] /][\ [..] //\\ //\\ //\\ [..] |||| |||| |||| |||| |||| |||| [..] |||| |||| |||| |||| |||| |||| |||| |||| [..] \][/ \][/ //\\ [..] \][/ //\\ //\\ [..]Вывод: (программа BF Hello World )
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.Вход: (нет роботов-тварей)
/\\\[]. ]..[..] \\//||\Выход: (пустая строка)
счет
Самая короткая подача в байтах побеждает. ( Удобный счетчик байтов. ) Tiebreaker имеет самый высокий пост.