TinyBF zu Brainf *** Konverter

9

Wir haben einen Brainf *** zu TinyBF Konverter, aber nicht umgekehrt, also hier ist einer.

Regeln:

  • Ihr Interpreter muss ein gültiges TinyBF-Programm in einer Zeile verwenden und das entsprechende BrainF *** -Programm in einer Zeile mit optionalem nachgestellten Leerzeichen / Zeilenumbruch ausgeben. Führende Leerzeichen sind nicht zulässig
  • Die Eingabe kann Zeichen enthalten oder nicht, die keines der vier TinyBF-Zeichen sind. In diesem Fall müssen Sie alle diese Zeichen an denselben Stellen drucken.
  • Eine Antwort wird am 1. April akzeptiert (kein Scherz), basierend auf einigen obskuren Kriterien, die ich verwenden werde (jk;) Ich werde das kürzeste Programm akzeptieren, das nicht nach den folgenden Regeln schummelt.)
  • Keine 0-Byte- oder 1-Byte-Lösungen, da dies den Spaß ruiniert, wenn Sie eine Programmiersprache nur für diesen Zweck erstellen (oder vorhanden sind).

Testfälle


Eingabe 1: +++++>+++++=>=|>>+=>>+|=>|>+=>+|(Berechnet 5 (Byte 1) + 5 (Byte 2) = 10 (Byte 3))
Ausgabe 1:+++++>+++++<[>>+<<-]>[>+<-]

Eingabe 2: +++>++++Hi+++:P+=>=|>|>+>+=>>&&+|=>>|=>>=+!!>>=+|>>>+|(Berechnet 3 (Byte 1) * 8 (Byte 2) = 24 (Byte 3)) Ausgabe 2:+++>++++Hi+++:P+<[>[>+>+<<&&-]>>[<<+!!>>-]<<<-]

HyperNeutrino
quelle
Wird es jemals E / A-Befehle geben?
Lirtosiast
Nein, da TinyBF keine E / A-Befehle hat.
HyperNeutrino
Das ist falsch; ==ist Brainfuck ..
Dennis

Antworten:

1

Python 2, 106 Bytes

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

Implementiert die TinyBF Spezifikation gefunden hier . Probieren Sie es online aus . Verbesserungen wurden unter Verwendung von Techniken aus der Antwort von @ Dica vorgenommen . Erfordert die Eingabe von Zeichenfolgen in Anführungszeichen.

Mego
quelle
Dies funktioniert für alle meine Testfälle! Gut gemacht.
HyperNeutrino
Sie können 5 Bytes mit speichern r+=b.get(c,c+c)[a]*(c!='='). Sie können die for-Schleife auch eine Zeile lang machen, um 3 weitere zu speichern. Sie können das Diktat inline setzen, um 4 weitere zu speichern. Inlining input()ist eine weitere 4.
Morgan Thrapp
Außerdem müssen Sie entweder raw_inputPython 3 verwenden oder zu Python 3 wechseln und die Byte-Strafe für nehmen print. Im Moment verstehe ich SyntaxError: invalid syntax.
Morgan Thrapp
@Mergo Ich habe meine Antwort auf Ihre gestützt, aber ich denke, es ist in Ordnung, weil die Änderungen schwer sind. Lassen Sie mich wissen, wenn Sie möchten, dass ich sie entferne
Dica
@MorganThrapp Die Eingabe wird in Anführungszeichen gesetzt, daher funktioniert sie für 2. Die Eingabe von Zeichenfolgen in Anführungszeichen ist für einen Meta-Beitrag zulässig, den ich derzeit nicht finden kann, weil ich mobil bin.
Mego
2

Python 3, 97 Bytes

Dieses Skript basiert auf der Antwort von @ Mego

a=0
for c in input():a-=c=='=';print({'+':'+-','>':'><','|':'[]'}.get(c,c)[a%-2]*(c!='='),end='')
Dica
quelle
3
Ich denke, dies ist Megos Antwort zu ähnlich und hätte in einem Kommentar als Optimierung vorgeschlagen werden sollen.
mbomb007
Obwohl dies kürzer ist, habe ich Megos Antwort akzeptiert, weil Ihre Antwort der von Mego zu ähnlich ist und eher eine Optimierung als eine eindeutige Antwort zu sein scheint.
HyperNeutrino