実証済みの最適!
((([()][()][()])))
オンラインでお試しください!
説明
Brain-Flak、Brain-Flueue、Miniflak、およびFλak
([()][()][()]) Push -3
( ) Copy
( ) Copy
これは印刷します:
-3
-3
-3
(末尾に改行があります)
Brain-Flak Classic
Brain-Flak ClassicはBrain-Flakのオリジナルバージョンであり、最新のBrain-Flakとはいくつかの重要な違いがあります。BFC [...]
では、内容を無効にするのではなく印刷します。
[()] Print 1
[()] Print 1
[()] Print 1
( ) Push 3
( ) Push 3
( ) Push 3
実行の最後に、スタックの内容(3 3 3
)が出力されます。
これは印刷します:
1
1
1
3
3
3
(末尾に改行があります)
Flakcats
Flakcatsは他の4つのflaksとはまったく異なります。これがFlakcatsで機能することには驚かされます。ここでの3つの演算子は、Brain-Flakが使用する演算子とほぼ同じです。
Flakcats間のこの特定のプログラムの主な違いは(...)
、Flakcatsの([{}]...)
Brain-Flak と同等の演算子です。ただし、ゼロを取得し、Brain-Flakと同じように動作するため、これは私たちに違いをもたらしません。
Brian-Flakにコンパイルされたプログラムは次のとおりです。
([{}]([{}]([{}][()][()][()])))
これは印刷します:
-3
-3
-3
(末尾に改行があります)
これは正式な証明ではなく、より厳密にするには拡張する必要がある非公式の証明です
Brain-Flakプログラムはバランスのとれた文字列でなければならず、プログラムの長さは3の倍数でなければならないという制限のため、有効な送信は長さが6の倍数でなければなりません。つまり、18より小さいソリューションの長さは12でなければなりません。
出力の末尾が改行であるため、スタックの最終的な高さは3の倍数である必要があります。そうでない場合、出力の制限が解除されます。
長さ12の有効なサブミッションには、2種類のブレースが必要です(これより少ないと、個別の文字数の制限に違反し、多ければ12文字以上を意味します)。プログラムは出力を生成するため、プッシュが必要です。
これにより、他のブレースセットを選択できます。オプションは次のとおりです。
<...>/<>
ゼロ以外の数値を作成するために「値」を生成する必要があるため、これは失敗します()
。
[...]/[]
これは、最後に失敗したのと同じ理由で失敗します。角カッコは価値を作るのが本当に悪いです。[]
モナドができる値を作成するが、我々は最初の番号をプッシュする必要があると私たちはその後、3回をプッシュするために残さ十分な括弧を持っていません。
{...}/{}
これは有望です。ループを作成し、それを使用()
して複数回プッシュできますが、残念ながらそれは不可能です。
ループが終了するためには、ある時点でスタックにゼロがなければならず、正しい出力を得るためには、プログラムの最後のスタックにゼロ以外のものがなければなりません。ループの最後にゼロ[]
も<>
ゼロもないので、スタックの底からの暗黙的なゼロでなければなりません。これは、ループが新しい数値をスタックに追加できず、スタックが役に立たないことを意味します。
中括弧の選択肢はいずれも長さ12のプログラムを作成できないため、存在することはできません。
MiniflakはBrain-Flakのサブセットであるため、短いMiniflakプログラムも短いBrain-Flakプログラムになり、存在しません。
脳液の最適性の証明
Brain-Flueueは、Brain-Flakに基づいたジョーク言語です。この2つは非常に似ており、2行を除いてインタープリターはどこでも同じです。2つの違いは、その名前が示すように、Brain-Flueueはデータをキューに格納し、Brain-Flakはデータをスタックに格納することです。
まず、Brain-Flakによって作成されるプログラムサイズに同じ制限があるため、サイズ12のプログラムを探しています。さらに(...)
、出力と別のペアを作成するためにが必要になります。ペアは、彼らが脳高射砲では動作しませんまったく同じ理由で脳Flueueでは動作しません。<>
[]
これで、プログラムが文字で構成されている必要があることがわかりました((())){{{}}}
。
前の証明で使用したのと同じ方法で、最終プログラムにループがなければならないことを実証できます。
Brain-Flueueはスタックではなくキュー間で動作するため、ここで証明が異なります。プログラムはキューの値でループを終了できます。
ループを終了するには、キューにゼロが必要です(または空のキューですが、キューが空の場合、Brain-Flakと同じ問題が発生します)。これ({})
を作成するには、プログラムを開いて、ゼロ。必要な数のアイテムをキューにプッシュするには、ループ内にプッシュする必要があります。また、ループに入る前にゼロ以外の数値をループの前にプッシュする必要があります。これは絶対に最小限の費用がかかります(())
。現在、使用しているよりも多くの括弧を使用しています。
したがって、12バイトのタスクを実行するBrain-Flueueプログラムはありません。さらに、プログラムは最適です。
次のソリューションはFlakcatsおよびBrain-Flak Classicに最適です。
((([][][])))
説明
[][][] -3
((( ))) push 3 times
代替の24バイトBrain-Flakソリューション
(<((<((<(())>)())>)())>)
オンラインでお試しください!
((<((<((<>)())>)())>)())
オンラインでお試しください!
((((((()()()){}){}){})))
オンラインでお試しください!