}0
--@2
@2/\=0MB
}0@1\/
&0/\>0!!
--
@1
00@0
--/\=0
\\@0&0
Marbelousは8ビット言語であり、値はRube Goldbergのようなマシンのビー玉だけで表されるため、これはそれほど簡単ではありませんでした。このアプローチは、次の擬似コードとほぼ同等です。
function recursiveFunction(int i)
{
for(int j = i*512; j > 0; j--)
{
recursiveFunction(i - 1);
}
}
最大値は256であるため(さまざまな場所で異なる方法で処理されるMarbleousプログラムでは0で表されます)、recursiveFunction(1)は、256!*512^256約10^1200に等しい合計と呼ばれ、簡単に宇宙を生き延びます。
Marbelousには非常に高速なインタープリターがありません。10^111年に1回この関数の呼び出しを実行できるようです。つまり、数年の実行時間を見ています10^1189。
Marbelousボードの詳細説明
00@0
--/\=0
\\@0&0
0016進数(つまり0)で表される言語リテラル(または大理石)です。この大理石はに落下し--、大理石を1つ減らします(00は回り込み、FFまたは10進数で255になります)。値がFFになった大理石は、上に落下し\\、右に1列、下に押し込まれます@0。これはポータルであり、大理石を他の@0デバイスにテレポートします。そこに、大理石/\が複製機であるデバイスに着地し、--その左側に大理石のコピーを1つ置きます(この大理石はポータル間をループし続け、すべてのループで減少します)=0。=0大理石を値0と比較し、等しい場合は大理石をトラフに落とし、等しくない場合は右に押します。ビー玉の値が0の場合、&0シンコナイザーであるに着陸します。これについては後で詳しく説明します。
全体として、これはループ内の0値の大理石から始まり、再び0に達するまでデクリメントし、この0値の大理石をシンクロナイザーに入れて同時にループを続けます。
}0@1
&0/\>0!!
--
@1
}0入力デバイスです。最初は、プログラムを呼び出すときにn番目(ベース0)のコマンドライン入力がすべての}nデバイスに配置されます。したがって、コマンドライン入力2でこのプログラムを呼び出すと、値02の大理石がこれを置き換えます}0。次に、このビー玉&0は別のシンクロナイザーであるデバイスに落ちます。シンクロナイザーは、&n他のすべての対応する&nが同様にファイリングされるまでビー玉を保持します。その後、大理石はデクリメントされ、テレポートされ、前述のループのように複製されます。次に、正しいコピーがゼロで>0ない場合に不等号()がチェックされ、0でない場合は通過します。0の場合、右にプッシュされてに着地し!!、ボードが終了します。
さて、これまでのところ、255から0まで連続的にカウントダウンし、0に達するたびに別の同様のループ(コマンドライン入力によって供給)を1回実行するループがあります。この2番目のループがn回(最大256 )プログラムは終了します。したがって、ループは最大65536回実行されます。宇宙を生き抜くには十分ではありません。
}0
--@2
@2/\=0MB
これは見慣れたものに見えるはずで、入力は1回減少し、この値はループしてコピーされます(大理石はループを実行するたびではなく、1回しか減少しません)。次に、0と等しいかどうかがチェックされ、ゼロでない場合はになりMBます。これはMarbelousの関数であり、すべてのファイルに複数のボードを含めることができ、各ボードは関数です。すべての関数には、グリッドの前にを付けて名前を付ける必要があります:[name]。ファイル内の最初の関数を除くすべての関数(標準名:MB)。したがって、このループはn - 1、nの値でメインボードを継続的に再度呼び出します。nは、関数のこのインスタンスが呼び出された値です。
なぜn*512ですか?
さて、最初のループは4ティック(および256回)で実行され、2番目のループはボードが終了する前にn回実行されます。これは、ボードが約n*4*256ティックの間実行されることを意味します。最後のループ(再帰的な関数呼び出しを行う)はよりコンパクトで、2ティックで実行されn*4*256/2 = n*512ます。つまり、関数の呼び出し回数を管理できます。
あなたが言及しなかったシンボルは何ですか?
\/ は、ボードからビー玉を取り除くゴミ箱です。これにより、ディスカートされたビー玉が、ラウンドをループしている他のビー玉と干渉せず、プログラムの終了を防ぎます。
ボーナス
マーベラスボードの底から落ちるビー玉はSTDOUTに出力されるため、このプログラムは実行中に大量のASCII文字を出力します。