RoboCritters ( етимологія ) - це абсолютно нова езотерична мова програмування (не переймайтесь пошуком її, я її просто винайшов). Це варіант з Brainfuck (BF), кілька більш складним , ніж звичайні схеми заміщення оператора. Кожна програма в RoboCritters - це прямокутна сітка тексту, яка містить лише сім символів . []/\|
, а також нові рядки для формування сітки.
Приклад програми RoboCritters:
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
Щоб перевести програму RoboCritters в BF, подивіться на кожен не новий рядок символів у сітці у звичайному порядку читання (зліва направо, потім зверху вниз), наприклад |\/||./|[]||[..][][] ||/\|[..][..][..] \/\/
.
Якщо розділ 4 × 2 сітки розширення вправо і вниз від поточного символу точно збігається з одним з восьми роботів тварюк , перерахованих нижче, додайте відповідну команду BF ( ><+-.,[]
) до (спочатку порожній) програмі BF.
Якщо секція сітки 4 × 2 не відповідає жодному з робочих факторів або не виходить за межі , до програми BF нічого не додається.
Joybot, командуйте
>
:[..] \][/
Спокій,
<
командування:[..] /][\
Squidbot,
+
команда:[..] //\\
Spiderbot,
-
команда:[..] ||||
Bunnybot,
.
команда:[][] [..]
Зубний робот,
,
команда:[..] |/\|
Foxbot,
[
команда:|\/| [..]
Batbot,
]
команда:[..] \/\/
Отже, читаючи приклад програми
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
ми можемо побачити, що ми спочатку стикаємося з Foxbot (у колонці 1, рядок 1), потім зубним роботом (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 / текстовий файл / командний рядок) та виведіть у stdout або найближчу альтернативу вашій мові.
Замість програми ви можете написати функцію, яка сприймає програму RoboCritters як рядок і друкує або повертає рядок програми BF.
Приклади
Введення: (варіант прикладу вище)
|\/|[][] [..][][] |/\|[..] \/\/
Вихід:
[,.]
Вхід: (тестує всі роботодавці)
[..][[[[[..]]. ]|\/| \][/[..]//\\[..][..] [..]/][\[][]|/\|[..] ||||/\| [..]| |\/\/
Вихід:
>+[<,-.]
Вхід:
[..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [][] [][] [..] [..] [..] [][] [..] [..] [][] [..] [..] [][] [..] [][] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [][] [..] [..] [..] [][] //\\ //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ /][\ /][\ /][\ /][\ |||| \/\/ \][/ //\\ \][/ //\\ \][/ |||| \][/ \][/ //\\ [..] /][\ \/\/ /][\ |||| \/\/ \][/ \][/ [..] \][/ |||| |||| |||| [..] //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] [..] //\\ //\\ //\\ [..] \][/ \][/ [..] /][\ |||| [..] /][\ [..] //\\ //\\ //\\ [..] |||| |||| |||| |||| |||| |||| [..] |||| |||| |||| |||| |||| |||| |||| |||| [..] \][/ \][/ //\\ [..] \][/ //\\ //\\ [..]
Вихід: (програма BF Hello World )
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
Вхід: (немає роботодавців)
/\\\[]. ]..[..] \\//||\
Вихід: (порожній рядок)
Оцінка балів
Виграє найкоротше подання в байтах. ( Зручний байтовий лічильник. ) Tiebreaker - це найвище оцінений пост.