TinyBFからBrainf ***へのコンバーター


9

Brainf ***からTinyBFへのコンバーターはありますが、その逆はありません。

ルール:

  • インタープリターは有効なTinyBFプログラムを1行で取得する必要があり、対応するBrainF ***プログラムを1行で出力し、オプションで末尾の空白/改行を付加する必要があります。先頭の空白は許可されていません
  • 入力には、4つのTinyBF文字のいずれでもない文字が含まれている場合と含まれていない場合があります。その場合は、これらの文字をすべて同じ場所に印刷する必要があります。
  • 私が使用するいくつかのあいまいな基準に基づいて、(冗談ではなく)4月1日に回答が受け入れられます(jk;)次のルールで不正を行わない最短のプログラムを受け入れます)
  • 0バイトまたは1バイトのソリューションはありません。これは、この目的のためだけのプログラミング言語を作成した(または存在する)場合、面白味を失うためです)

テストケース


入力1:+++++>+++++=>=|>>+=>>+|=>|>+=>+|(5(バイト1)+ 5(バイト2)= 10(バイト3)を計算))
出力1:+++++>+++++<[>>+<<-]>[>+<-]

入力2:(+++>++++Hi+++:P+=>=|>|>+>+=>>&&+|=>>|=>>=+!!>>=+|>>>+|計算3(バイト1)* 8(バイト2)= 24(バイト3))出力2:+++>++++Hi+++:P+<[>[>+>+<<&&-]>>[<<+!!>>-]<<<-]


I / Oコマンドはありますか?
リルトシアスト2016

いいえ、TinyBFにはIOコマンドがないためです。
HyperNeutrino 2016

それは不正解です。==は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の回答の手法を使用して改善が行われました。引用符で囲まれた文字列の入力が必要です。


これは私のすべてのテストケースで機能します!よくやった。
HyperNeutrino 2016

で5バイトを節約できますr+=b.get(c,c+c)[a]*(c!='=')。forループを1行にして、さらに3行節約することもできます。辞書をインライン化してさらに4を節約できます。インライン化はinput()、他の4です
モルガンThrapp

また、raw_inputPython 3を使用するか、Python 3に切り替えて、のバイトペナルティを取る必要がありますprint。今ですSyntaxError: invalid syntax
Morgan Thrapp、2016

@メルゴ私はあなたの答えに基づいていますが、変更が重いので大丈夫だと思います。削除したい場合はお知らせください
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='')

3
これはMegoの回答に非常に似ていると思います。コメントの最適化として提案されているはずです。
mbomb007 2016

これは短いですが、私はMegoの回答を受け入れました。あなたの回答はMegoの回答に類似しているため、明確な回答というよりは最適化のように見えます。
HyperNeutrino 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.