フォローアップとして 出力サイズがGrahamの数を超え、GolfがTREE(3)より大きい数である最短終了プログラムの、私は新しい課題を提示します。
ローダーの数は非常に大きい数であり、説明するのは困難です(それ自体が柔軟な目標を持つコードゴルフ練習の結果であるため)。そこ定義と説明があり、ここではなく、自己封じ込めのために、私も、この記事の後半でそれを説明しようとします。
Ralph Loaderが使用するアルゴリズムは、これまでに作成された(計算可能な)アルゴリズムの中で最大の数の1つを生成します。実際、Loaderの番号は、Googology Wikiで最大の「計算可能な」番号です。(「計算可能な」数とは、計算の観点から定義された数を意味します。)つまり、答えがローダーの数よりも面白い数(つまり、ローダーの数+1だけではない)を生成する場合、 Googologyの歴史!そうは言っても、Loaderのnumber + 1のようなものを生成するプログラムは、間違いなく有効な答えであり、この質問に対する候補です。名声を期待しないでください。
あなたの仕事は、ローダーの数よりも大きい数を生成する終了プログラムを作成することです。これはcode-golfなので、最短のプログラムが勝ちです!
- 入力を許可されていません。
- プログラムは最終的に確定的に終了する必要がありますが、マシンには無限のメモリがあると想定できます。
- あなたの言語の数値型は任意の有限値を保持できると仮定するかもしれませんが、これがあなたの言語で正確にどのように機能するかを説明する必要があります(例:浮動小数点数は無限の精度を持っていますか?)
- 出力として無限は許可されません。
- 数値型のアンダーフローは例外をスローします。ラップアラウンドしません。
- 番号が非常に大きい理由の説明と、ソリューションが有効かどうかを確認するためのコードの未使用バージョンを提供する必要があります(ローダーの番号を格納するのに十分なメモリを備えたコンピュータがないため)。
ローダーの番号の説明は次のとおりです。より正確な詳細については、http://googology.wikia.com/wiki/Loader%27s_numberおよびその中のリンクを参照してください。特に、ローダーの番号を(定義により)正確に生成するプログラムが含まれています。
構造の計算は、本質的に非常に特定のプロパティを持つプログラミング言語です。
まず、構文的に有効なプログラムはすべて終了します。無限ループはありません。これは、構築プログラムの任意の計算を実行する場合、プログラムがスタックしないことを意味するため、非常に便利です。問題は、これは構造の計算がチューリング完全ではないことを意味することです。
第二に、チューリング以外の完全な言語の中で、最も強力な言語の1つです。基本的に、チューリングマシンがすべての入力で停止することを証明できれば、それをシミュレートする構造計算の関数をプログラムできます。(停止しても、停止できないことを証明できない停止マシンがあります。)
ローダーの番号は、基本的に構造の計算のためのビジーなビーバー番号です。これは、すべてのcocプログラムが終了するため計算が可能です。
特に、loader.cはと呼ばれる関数を定義しますD
。おおよそ、D(x)
未満のすべてのビット文字列を反復処理しx
、それらをcocプログラムとして解釈し、構文的に有効なものを実行し、結果を連結します(これもビット文字列になります)。この連結を返します。
ローダーの番号はD(D(D(D(D(99)))))
です。
googolology wikiからのコードのより読みやすいコピー
int r, a;
P(y,x){return y- ~y<<x;}
Z(x){return r = x % 2 ? 0 : 1 + Z (x / 2 );}
L(x){return x/2 >> Z(x);}
S(v,y,c,t){
int f = L(t);
int x = r;
return f-2 ? f>2 ? f-v ? t-(f>v)*c : y : P(f,P(S(v,y,c,L(x)), S(v+2,t=S(4,13,-4,y),c,Z(x)))) : A(S(v,y,c,L(x)),S(v,y,c,Z(x)));
}
A(y,x){return L(y)-1 ? 5<<P(y,x) : S(4,x,4,Z(r));}
D(x)
{
int f;
int d;
int c=0;
int t=7;
int u=14;
while(x&&D(x-1),(x/=2)%2&&(1)){
d = L(L(D(x))),
f = L(r),
x = L(r),
c - r||(L(u)||L(r)-f||(x/=2)%2&&(u=S(4,d,4, r),t=A(t,d)),f/2&(x/=2)%2&&(c=P(d,c),t=S(4,13,-4,t),u=S(4,13,-4,u))),
c&&(x/=2)%2&&(t=P(~u&2|(x/=2)%2&&(u=1<<P(L(c),u)),P(L(c),t)),c=r)
u/2&(x/=2)%2&&(c=P(t,c),u=S(4,13,-4,t),t=9);
}
return a = P( P( t, P( u, P( x, c)) ),a);
}
main(){return D(D(D(D(D(99)))));}