Konwerter TinyBF do Brainf ***

9

Mamy konwerter Brainf *** na TinyBF, ale nie na odwrót, więc oto jeden.

Zasady:

  • Twój tłumacz musi wziąć poprawny program TinyBF, w jednym wierszu, i musi wypisać odpowiedni program BrainF ***, w jednym wierszu, z opcjonalnym końcowym białym znakiem / nową linią. Żadne wiodące białe znaki nie są dozwolone
  • Dane wejściowe mogą, ale nie muszą zawierać znaków, które nie są żadnym z czterech znaków TinyBF. Jeśli tak, musisz wydrukować wszystkie te postacie w tych samych miejscach.
  • Odpowiedź zostanie zaakceptowana 1 kwietnia (nie żartuję), w oparciu o pewne niejasne kryteria, których użyję (jk;) Akceptuję najkrótszy program, który nie oszukuje według następujących zasad)
  • Brak rozwiązań 0-bajtowych lub 1-bajtowych, ponieważ psuje zabawę, jeśli tworzysz (lub istnieje) język programowania tylko do tego celu)

Przypadki testowe


Wejście 1: +++++>+++++=>=|>>+=>>+|=>|>+=>+|(Oblicza 5 (bajt 1) + 5 (bajt 2) = 10 (bajt 3))
Wyjście 1:+++++>+++++<[>>+<<-]>[>+<-]

Wejście 2: +++>++++Hi+++:P+=>=|>|>+>+=>>&&+|=>>|=>>=+!!>>=+|>>>+|(oblicza 3 (bajt 1) * 8 (bajt 2) = 24 (bajt 3)) Wyjście 2:+++>++++Hi+++:P+<[>[>+>+<<&&-]>>[<<+!!>>-]<<<-]

HyperNeutrino
źródło
Czy kiedykolwiek będą komendy we / wy?
lirtosiast
Nie, ponieważ TinyBF nie ma poleceń We / Wy.
HyperNeutrino
To jest niepoprawne; ==należy do pieprzenia mózgu ..
Dennis

Odpowiedzi:

1

Python 2, 106 bajtów

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

Implementuje specyfikację TinyBF, jak tutaj . Wypróbuj online . Wprowadzono ulepszenia przy użyciu technik z odpowiedzi @ Dica . Wymaga wprowadzenia ciągu znaków cytowanych.

Mego
źródło
Działa to dla wszystkich moich przypadków testowych! Dobra robota.
HyperNeutrino
Możesz zapisać 5 bajtów za pomocą r+=b.get(c,c+c)[a]*(c!='='). Możesz także utworzyć jedną pętlę for, aby zapisać 3 kolejne. Możesz wstawić dyktę, aby zapisać 4 kolejne. Inlining input()to kolejna 4.
Morgan Thrapp
Musisz także użyć raw_inputPythona 3 lub przełączyć się na niego i wziąć za niego bajtową karę print. Teraz rozumiem SyntaxError: invalid syntax.
Morgan Thrapp
@Mergo Oparłem moją odpowiedź na twojej, ale myślę, że jest w porządku, ponieważ modyfikacje są ciężkie, daj mi znać, jeśli chcesz, żebym ją usunął
Dica
@MorganThrapp Dane wejściowe są cytowane, więc działa dla 2. Pobieranie cytowanego ciągu znaków jest dozwolone dla każdego postu, którego nie mogę teraz znaleźć, ponieważ jestem na telefonie komórkowym.
Mego
2

Python 3, 97 bajtów

Ten skrypt jest oparty na odpowiedzi @ Mego

a=0
for c in input():a-=c=='=';print({'+':'+-','>':'><','|':'[]'}.get(c,c)[a%-2]*(c!='='),end='')
Dica
źródło
3
Myślę, że jest to zbyt podobne do odpowiedzi Mego i powinno być zasugerowane jako optymalizacja w komentarzu.
mbomb007
Chociaż jest to krótsze, zaakceptowałem odpowiedź Mego, ponieważ twoja odpowiedź jest zbyt podobna do Mego i wydaje się raczej optymalizacją niż wyraźną odpowiedzią.
HyperNeutrino,