Конвертер TinyBF в Brainf ***

9

У нас есть конвертер Brainf *** в TinyBF, но не наоборот, так что вот один.

Правила:

  • Ваш переводчик должен взять действительную программу TinyBF в одну строку и вывести соответствующую программу BrainF *** в одну строку с необязательным завершающим пробелом / символом новой строки. Запрещены пробелы в начале строки
  • Ввод может содержать или не содержать символы, которые не являются ни одним из четырех символов TinyBF. Если это так, вы должны напечатать все эти символы в тех же местах.
  • Ответ будет принят 1 апреля (без шуток), основываясь на некоторых непонятных критериях, которые я буду использовать (jk;) Я приму самую короткую программу, которая не обманывает по следующим правилам)
  • Нет 0-байтовых или 1-байтовых решений, потому что это разрушает удовольствие, если вы создаете (или существует) язык программирования только для этой цели)

Тестовые случаи


Вход 1: +++++>+++++=>=|>>+=>>+|=>|>+=>+|(вычисляет 5 (байт 1) + 5 (байт 2) = 10 (байт 3))
Выход 1:+++++>+++++<[>>+<<-]>[>+<-]

Вход 2: +++>++++Hi+++:P+=>=|>|>+>+=>>&&+|=>>|=>>=+!!>>=+|>>>+|(вычисляет 3 (байт 1) * 8 (байт 2) = 24 (байт 3)) Выход 2:+++>++++Hi+++:P+<[>[>+>+<<&&-]>>[<<+!!>>-]<<<-]

HyperNeutrino
источник
Будут ли когда-нибудь команды ввода / вывода?
lirtosiast
Нет, потому что TinyBF не имеет команд ввода-вывода.
HyperNeutrino
Это неверно; ==является Brainfuck - х ..
Деннис

Ответы:

1

Python 2, 106 байт

a=0
r=''
for c in input():a=[a,~a][c=='='];r+={'+':'+-','>':'><','|':'[]'}.get(c,c)[a%-2]*(c!='=')
print r

Реализует спецификацию TinyBF, как показано здесь . Попробуйте онлайн . Улучшения были сделаны с использованием техник из ответа @ Dica . Требуется ввод строки в кавычках.

Mego
источник
Это работает для всех моих тестовых случаев! Отличная работа.
HyperNeutrino
Вы можете сохранить 5 байтов с r+=b.get(c,c+c)[a]*(c!='='). Вы также можете сделать цикл для одной строки, чтобы сохранить еще 3. Вы можете вставить диктат, чтобы сохранить еще 4. Это input()еще одна четверка .
Морган Трепп
Кроме того, вам нужно либо использовать raw_inputPython 3, либо перейти на него и принять штраф за байты print. Прямо сейчас я получаю SyntaxError: invalid syntax.
Морган Трепп
@Mergo Я основал свой ответ на твоем, но я думаю, что все в порядке, потому что изменения тяжелые, дай мне знать, если хочешь, чтобы я его удалил
Dica
@MorganThrapp Ввод заключен в кавычки, поэтому он работает для 2. Ввод метки в виде строки в кавычках разрешен для мета-сообщения, которое я не могу найти прямо сейчас, потому что я на мобильном телефоне.
Mego
2

Python 3, 97 байт

Этот сценарий основан на ответе @ Mego

a=0
for c in input():a-=c=='=';print({'+':'+-','>':'><','|':'[]'}.get(c,c)[a%-2]*(c!='='),end='')
Dica
источник
3
Я думаю, что это слишком похоже на ответ Мего и должно было быть предложено в качестве оптимизации в комментарии.
mbomb007
Хотя это короче, я принял ответ Мего, потому что ваш ответ слишком похож на ответ Мего, и это скорее оптимизация, чем отдельный ответ.
HyperNeutrino