MarioLANGは、ソースコードがスーパーマリオブラザーズレベルに似ている2次元プログラミング言語です。さらに、その命令セットはBrainfuckのものと非常に似ています。つまり、MarioLANGは本質的に、命令ポインターがマリオのように移動する2次元のBrainfuckです。だから、私は私のMarioLANGの提出を書いたとき、プログラミング言語クイズのために、私はBrainfuck変換することによって始めに「Hello、World!」という MarioLANGへのプログラム。これは非常に体系的なプロセスで可能であることに気づいたので、Brainfuck-to-MarioLANGコンパイラを作成しましょう。
注: MarioLANGの仕様は完全に明確ではないため、Ruby実装の解釈を想定しています。
以下のBrainfuckプログラムでプロセスを説明します。
++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>.
印刷Hello!
し、末尾に改行を付けます。
変換
<
および>
to(
および)
、それぞれ:++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.).
マリオが歩く床を追加します。
++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.). ========================================================================
問題は、MarioLANGに
[
andのようなループがないこと]
です。代わりに、エレベーターと方向指示を使用して、マリオを実際にループで歩く必要があります。まず、我々は交換する[
と>
とに、床を変更します"
。また、フロアを次のように置き換え]
て[!
変更し=#
ます。++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.). =="======"===============================#===#============================
エレベーター(から始まる形成することができるで終わるが、今すべての私たちに必要なのは、)マリオに戻って歩くための補助床です。で始まり、で終わる:
"
#
#
"
!
<
++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.). =="======"===============================#===#============================ ! < #===============================" ! < #=========================================="
インタプリタはエレベータの端を短い行に接続できないため、すべての行は少なくとも最大のループを囲む必要があります。したがって、中央の行にスペースを埋め込みます。
以上です。完全に機能する、同等のMarioLANGプログラムがあります。
チャレンジ
有効なBrainfuckプログラムが与えられたら、上記の手順を実装してMarioLANGプログラムにコンパイルします。
入力にはコマンド文字のみ、つまり以外の文字はないと想定でき,.+-<>[]
ます。
すべての補助フロアは、メインプログラムフロアのできるだけ近くに配置する必要があります。中間フロアのラインをできる限り小さくする(最大の囲みループの幅まで)か、メインプログラムの最後までパディングするかを選択できます。
プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。結果をSTDOUTに出力しない場合でも、改行で区切られた単一の文字列である必要があります。
これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。
テストケース
テストケースの形式は次のとおりです。最初の行はBrainfuckプログラム(入力)で、空の行があり、次の空の行までがMarioLANGの期待される出力です。これらの例では、最小限の埋め込みスペースを使用しています。あるいは、出力の最初の行の幅まで各行にスペースを埋め込むこともできます。
>,++-.<
),++-.(
=======
,[.,]
,>.,[!
="===#
! <
#==="
>>[-]<<[->>+<<]
))>-[!((>-))+(([!
=="==#=="=======#
! < ! <
#==" #======="
++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>.
++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.).
=="======"===============================#===#============================
! <
#==============================="
! <
#=========================================="
[][[[][[]]][]][[]]
>[!>>>[!>>[![![!>[![!>>[![!
"=#"""=#""=#=#=#"=#=#""=#=#
! < ! < ! < ! < ! <
#=" #=" #=" #=" #="
! < ! <
#====" #===="
! <
#=========="
! <
#================"
>>+++++++>>++>>++++>>+++++++>>+>>++++>>+>>+++>>+>>+++++>>+>>++>>+>>++++++>>++>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+++++++>>+>>+++++>>++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+++++++++++++++++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+>>+++++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>++>>++++>>+++++++>>+>>+++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++>>+>>++++>>+>>+>>++>>+++++>>+>>+++>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++++++++++++++>>++>>++>>+++>>++>>+>>++>>++++>>+++++++>>++>>+++++>>++++++++++>>+>>++>>++++>>+>>++>>+>>++++++>>++++++>>+>>+>>+++++>>+>>++++++>>++>>+++++>>+++++++>>++>>++++>>+>>++++++[<<]>>[>++++++[-<<++++++++++>>]<<++..------------------->[-<.>>+<]>[-<+>]>]<<[-[-[-[-[-[-[>++>]<+++++++++++++++++++++++++++++>]<++>]<++++++++++++++>]<+>]<++>]<<[->.<]<<]
))+++++++))++))++++))+++++++))+))++++))+))+++))+))+++++))+))++))+))++++++))++))++++))+++++++))+))+++++))++))+))+))++++))+++++++))+))+++++))+))+))+))++++))+++++++))+))+++++))++++++++++++++))+))+))++++))+++++++))+))+++++))++))+))+))++++))+++++++))+))+++++))+++++++++++++++++++++++++++++))+))+))++++))+++++++))+))+++++))++))+))+))+++++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))++))++++))+++++++))+))+++++))+++++++))+))+++++))+))+))+))++++))+))++))+))++++++))+))+++++))+++++++))+))++++))+))+))++))+++++))+))+++))+))++++))+))++))+))++++++))+))+++++))+++++++++++++++++++))++))++))+++))++))+))++))++++))+++++++))++))+++++))++++++++++))+))++))++++))+))++))+))++++++))++++++))+))+))+++++))+))++++++))++))+++++))+++++++))++))++++))+))++++++>(([!))>)++++++>-((++++++++++))[!((++..-------------------)>-(.))+([!)>-(+)[!)[!((>->->->->->->)++)[!(+++++++++++++++++++++++++++++)[!(++)[!(++++++++++++++)[!(+)[!(++)[!((>-).([!(([!
========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================="===#=="======="================#=========================="========#="=====#==#=="="="="="="="=====#================================#=====#=================#====#=====#=="=====#===#
! < ! < ! < ! < ! < ! <
#===" #================" #========" #=====" #=====" #====="
! < ! <
#=======================================================================" #========================================"
! <
#================================================"
! <
#===================================================================="
! <
#==========================================================================="
! <
#==================================================================================="
! <
#=================================================================================================="