このチャレンジは、2018年4月のLotMチャレンジの一部として投稿されました
Brain-Flakはチューリングターピット言語であり、PPCGでかなりの名声を得ています。この言語の記憶は2つのスタックで構成されていますが、ウィザードのWh eによって「隠された」3番目のスタックが発見され、Brain-Flakプログラムの興味深い新しい考え方につながりました。
だから、その貧しい隠された3番目のスタックの可視性を高めるのはどうですか?3番目のスタックに値する認識を持つ言語を作成しましょう!ここでThird-Flakを紹介します。
言語
Third-Flakには、3番目のスタックと呼ばれるスタックが1つだけあります。オペレータは、彼らが脳高射砲で行うのと同じ方法で、第三スタック上で動作しますが、ここには存在しない[]
、{}
、<>
niladsなし{...}
モナドは(サード高射砲プログラムでのみ許容文字があるので()[]<>
)。各演算子の動作は次のとおりです(最後の要素がスタックの一番上にあるリストを持つ3番目のスタックを表す例を示します)。
()
Third-Flakで唯一の2文字演算子です。3番目のスタックの最上部を1つ増やします。例:[1,2,3]
→[1,2,4]
(
、[
、<
:前ケースによって覆われていないすべての開口括弧プッシュ0
第三のスタックに。例:[1,2,3]
→[1,2,3,0]
)
3番目のスタックから2つの要素をポップし、それらの合計をプッシュバックします。例:[1,2,3]
→[1,5]
]
3番目のスタックから2つの要素をポップし、2番目から1番目を減算した結果をプッシュバックします。例:[1,2,3]
→[1,-1]
>
3番目のスタックから要素をポップします。例[1,2,3]
→[1,2]
そして、言語の他の規則は次のとおりです。
実行の開始時に、3番目のスタックには単一の0のみが含まれます。
空
[]
または<>
プログラム内に置くことは禁じられています(Third-Flakのセマンティクスに従う場合は、とにかく何もしませんが、実際にはBrain-Flakではここで再作成することはできません)。プログラムの最後にある末尾の閉じ括弧が欠落している可能性があるという事実を除いて、括弧は常にバランスを取る必要があります。例として、
[()<(()
有効なThird-Flakプログラムがあります(プログラムの最後の3番目のスタックはになります[1,0,1]
)。プログラムには、許可された6文字のみを含めることができます
()[]<>
。プログラムは空でないことが保証されています。
注:これは、空のスタックからポップする必要がある状況に対処する必要がないという以前のルールによって暗示されています。
チャレンジ
シンプルで、Third-Flakのインタープリターを作成します。プログラムは、入力としてThird-Flakプログラムを受け取り、プログラムの最後の3番目のスタックの状態を出力として返す必要があります。
出力形式は、3番目のスタックの状態を明確に読み取ることができ、同じ番号が常に同じ方法でエンコードされる限り柔軟です(これは、出力形式が露骨な方法ではないことを示す方法です)不正行為を試みることは問題ありません)。
出力の選択により、チャレンジが簡単にならない限り、管理できる数値の範囲が制限される場合があります(これがデフォルトの抜け穴になるため)。
テストケース
各テストケースでは、最初の行が入力であり、2行目が出力スタックであり、スタックの最上部が最後の要素である数字のスペース区切りリストとして表されています。
[()<(()
0 1 0 1
[((((()()()()()))
0 0 0 5
((([()][()][()])))
-3
[<<(((()()()())(((((
0 0 0 0 0 4 0 0 0 0 0
[()]<(([()])><[()]
-1 0 -1
(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(())(())(()())(())(())(())(()())(()()()())(())(()()()()())(()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(())(())(()())(())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(())(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(()()())(())(()()())(())(())(())(()())(()()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(())(())(())(()()())(())(())(())(()())(())(()())(()()()())(())(())(()()()()())(()())(()())(())(()()())(())(())(())(())(()()())(()())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(()()()()())(())(()()())(())(())(()())(())(()()()()())(())(()()()()())(())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()()()())(())(()()()()())(())(())(())(()())(())(()()()()())(())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()()()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(())(()())(()()()())(())(())(()())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(()()())(())(())(()())(())(())(()()()()())(()()()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(()()()())(()()()())(()()
718 2
[()]
は、空のスタックからポップすることを心配する必要がないというルールを破ります