忙しい脳ビーバー


13

できるだけ多くのステップを実行しますが、無限ループしない256文字以下のBrainfuckプログラムを作成します。プログラムは入力を受け付けません。

すなわち:

  • 右側に無数のセルがあると仮定します。
  • A <左端のセルに何もしません。
  • A -セル値がゼロセットセルです255
  • 命令は+-<>.すべて、実行時に1つのステップとしてカウントされます。
  • とき[かが]検出され、それが一歩としてカウントされます。ただし、条件が真であり、制御フローがジャンプする場合、対応する]または再びステップとしてカウントされ[ませ
  • 最も多くのステップを踏むソリューションが勝ちです。
  • ソリューションにある種のパターンがある場合、同様の長さのプログラムnがとるステップ数の関数を与えることは歓迎されますが、必須ではありません。
  • 指示を数えるために、この修正されたインタープリターを使用できます:

例:

++[-]

検出された命令は++[-]-]であり、プログラムは7ステップ実行されました。


6
勝者が通訳者のカウントをオーバーフローせずに終了した場合、私は驚かれることでしょう。6ステートTMビジービーバーは少なくとも10 ** 36534ステップかかることに注意してください。
ピーターテイラー

同意する。何年も実行できる50文字未満のBFプログラムを作成できる可能性が高いようです。始めましょう。
captncraig

署名しました。drb.insel.de/~heiner/BBのBusy Beaverの研究ページは非常に興味深いものです。特に、記録プログラムが非常に長く実行され、依然として正確な結果が得られるという事実drb.insel.de/~heiner/BB/bbを参照) -xlist.txt)-シミュレーションは状態を記憶し、シミュレーションステップなどを保存するために「マクロ」を構築します
。-シュナーダー

4
@AntonGolov:あなたは256 ^より大きい店舗bignumsしようとすると、残念ながら、この宇宙では、RAMやHDSは無限のストレージデバイスに変換しないバイト単位のサイズ、それらの...
ターンに終わっはcounterclockwis

1
@boothby現在のコンピューターで超越を含む正確な計算を行うことは完全に可能です。値のコンポーネントは、一般的な日常のコンピューティングに使用される通常floatまたはdoubleプリミティブよりも抽象的な表現で保存する必要があります。(その時点で、コンピューターはほとんど方程式を表す文字列を操作しているだけです)
AJMansfield

回答:


15

最終的に停止し、10↑(10↑28)を超える連続セルを1に設定したままにする41文字のプログラムを次に示します(したがって、実行される命令の数はそれよりもはるかに多くなります)。

>+>+>+>+[->[>]+[->[>]+[->[>]+[<]+<]+<]+<]

私が間違っていなければ、それは各メモリセルにシングルビットを使用するBFバリアント言語の次のプログラムの正しい翻訳です(つまり、0..255の代わりにセルコンテンツ0..1なので、「+」単にビット値を反転するように機能します):

>+>+>+>+[+>[>]+[+>[>]+[+>[>]+[<]+<]+<]+<]

後者のプログラムによって生成される正確な値(隣接する1ビットの数)は

3 * (2 ↑ 118842243771396506390315925503 - 1) + 1.


上記のプログラムは、2↑↑xのように成長する関数を初期化し、計算します(Knuth上矢印表記)。2↑ 23 xのように成長する関数を初期化および計算するバリアントBFプログラムの同様の変換は、次の256文字のプログラムを提供します。

>+>+>+>+>+>+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[->[>]+[<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+<]+

最終的に停止し、2↑ 23 6 を超える隣接セルが1に設定されたままになります(したがって、ステップ数はそれ以上になります)。

NB-1:2↑ 23 6は「考えられないほど大きい」数です。たとえば、2↑ 4 6 = 2↑↑↑↑6 でさえ、グラハムの数を計算するために使用されるシーケンスの最初の項(3↑↑↑↑3)をすでに超えています。

NB-2:BFプログラムがGrahamの数よりもはるかに大きな出力を持つ関数を初期化および計算するには、256文字で十分だと思われます。時間がある場合は、1つ書きます。

NB-3:上記のプログラムの起源に興味がある人のために、Pythonで書かれたさまざまなプログラムを使用した "Brainf * ck F"のプログラミングリソースを紹介します。(「Brainf * ck F」、または単に「F」は、私がSmallf * ck esolanguageのチューリング完全版と呼んでいるものです。)私は今、これらのファイルをアップロードしました。リンクされたWebページは単なる「ファイルキャビネット」です。上記のプログラムに関連する詳細な説明については、Busy_Beavers.txtファイルを参照してください。


これは現時点では明らかな勝者です(他の人を過小評価していない限り)。その他の提案も大歓迎ですが、今のところは承認済みとしてマークします。誰もが同意しない場合は、コメントしてください。
アントンゴロフ

このレベルに到達すると、無限のメモリを持つインタプリタがあると仮定するのは非現実的になります。私はこれが有限のラッピングメモリでより良い挑戦になると考え始めているので、実際に答えを実行することができます。
captncraig

9

これは素敵な39文字の1つです。

-[>-[>-[-[>+<-]<[>+<-]<[>+<-]>>>]<-]<-]

基本的に3スペース幅の「そり」を作成し、右に移動して1ずつ減少させます。31,919,535,558命令で完了し、最も内側のループは256 ^ 3回実行されます。私はまだ、これを14文字の割合で実行時間のもう1桁にまで拡張する余地が十分にあります。

無制限のメモリまたはラッピングメモリを備えたインタープリターで動作します。

2ループの改良バージョンがいつ終了するかを判断するために、読者に演習を任せます。

-[>-[>-[>-[>-[-[>+<-]<[>+<-]<[>+<-]<[>+<-]<[>+<-]>>>>>]<-]<-]<-]<-]

今では一晩実行されており、3,000,000,000ステップを超えています。まだ外側のループの単一の反復を行っていません。2番目のループの15%をかろうじて通過しました。


2

このプログラムは、無限の数のセルで機能します。2つの値は、ascii値255で始まります。メインループの最初の回転の最初の値は255セルに分割され、それぞれ255で初期化されます。メインループの2番目の回転で255セルの各値が再び分割されます最大255 * 255セル、メインループの255回転の場合と同様に、初期化されるセルの合計は255 ^ 255になります。2番目の値は、メインループが繰り返される回数を決定します。

>->>-[<<[<]>[[[>]>>>[>]-[<]<<<[<]>-]>]>[>>[>]>+<<[<]<-]>>[>]>-]

2

このプログラムは以前のプログラムとほとんど同じですが、外側のループを決定する値が特定のセルで固定されているため、初期化されたセルの数とプログラムの最後の合計ステップの両方を増やすことができます

->>-<<[>>[>]<[[>>[>]-[<]<-]>>[[<+>-]>]<<[<]<]>>[[<+>-]>]<<[<]<-]

プログラムの終了時に初期化されたセル255 ^ 255

-[>-[>->>[-]-<<[>>[>]<[[>>[>]-[<]<-]>>[[<+>-]>]<<[<]<]>>[[<+>-]>]<<[<]<-]<-]<-]

プログラムの終了時に初期化されたセル255 ^ 255 ^ 3

さらに多くのステップで実行するように修正しました。

->>>->>-<<<<<[>>>[>]<[[>>[>]<[[>>[>]-[<]<-]>>[[<+>-]>]<<[<]<]>>[[<+>-]>]<<[<]<-]<[>>>[[<+>-]>]<<[<]]<]>>>>[[<<+>>-]>]<-<<[<]<<-]

メインループの2番目の回転中にメイン255 ^(255 ^ 255 * 255)セルの最初の回転中に255 ^ 255セルを初期化し、メインループの3番目の回転中に255 ^ {255 ^(255 ^ 255 * 255)* 255}セルを初期化します。この方法でループは255回繰り返されます


素晴らしく見える!まだ答えを受け入れていないことを残念に思います-これらを見て、成長の順序を理解するのに時間がかかるでしょう。「255 ^ 255 * 255」と言うとき、「255 ^(255 * 255)」という意味ですか?(それ以外の場合は「255 ^ 256」を期待しています。)
アントンゴロフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.