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 имеет самый высокий пост.