}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^11
1年に1回この関数の呼び出しを実行できるようです。つまり、数年の実行時間を見ています10^1189
。
Marbelousボードの詳細説明
00@0
--/\=0
\\@0&0
00
16進数(つまり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文字を出力します。