Çıktı boyutu Graham'ın sayısını ve Golf'ü AĞAÇ (3) 'den daha büyük bir sayı aşan En Kısa sonlandırma programının bir takibi olarak , yeni bir zorluk ortaya koyuyorum.
Yükleyicinin sayısı çok büyük bir sayıdır, bu açıklanması biraz zordur (esnek bir hedefe sahip bir kod golf egzersizinin sonucu olduğu için). Burada bir tanım ve açıklama var , ancak kendi kendini sınırlama amacıyla, bunu daha sonra bu yazıda da açıklamaya çalışacağım.
Ralph Loader'ın kullandığı algoritma, şimdiye kadar yazılmış herhangi bir (hesaplanabilir) algoritmanın en büyük sayılarından birini üretir! Aslında, Loader'ın numarası Googoloji Wiki'sindeki en büyük "hesaplanabilir" sayıdır. ( "Hesaplanabilir" sayısı, onlar bir hesaplama açısından tanımlanır bir sayı anlamına gelir.) Cevap ilginç bir şekilde Loader en sayısından daha büyük bir sayı üretir eğer araçlar (yani sadece Loader numaralı + 1 değil), bu o sen aşağı gidebiliriz Googoloji tarihi! Bununla birlikte, Loader'in numarası + 1 gibi bir şey üreten programlar kesinlikle geçerli cevaplar ve bu sorunun karşıtlarıdır; sadece şöhret beklemeyin.
İşiniz, Yükleyiciden daha büyük bir sayı üreten bir sonlandırma programı oluşturmaktır . Bu kod golf , bu yüzden en kısa program kazanır!
- Giriş alma izniniz yok.
- Programınız nihayetinde deterministik olarak sona ermelidir, ancak makinenin sonsuz belleği olduğunu varsayabilirsiniz.
- Dilinizin sayı türünün herhangi bir sonlu değer taşıyabileceğini varsayabilirsiniz, ancak bunun sizin dilinizde tam olarak nasıl çalıştığını açıklamanız gerekir (örn: bir şamandıra sonsuz hassasiyete sahip mi?)
- Sonsuzlukların çıktı olarak kullanılmasına izin verilmez.
- Bir sayı türünün az akışı bir istisna atar. Etrafına sarılmaz.
- Çözümünüzün geçerli olup olmadığını kontrol etmek için numaranızın neden bu kadar büyük olduğunu ve kodunuzun çözülmemiş bir versiyonunu açıklamanız gerekir (çünkü Loader'ın numarasını saklamak için yeterli belleğe sahip bir bilgisayar olmadığı için).
İşte Loader sayısının açıklaması. Bkz http://googology.wikia.com/wiki/Loader%27s_number ve buradaki daha kesin ayrıntılar için linkler. Özellikle, Loader'ın numarasını tam olarak üreten bir program içerir (tanım gereği).
Yapıların taşı esas itibarıyla çok özel özellikleri olan bir programlama dili.
Her şeyden önce, sözdizimsel olarak geçerli her program sona erer. Sonsuz döngü yok. Bu çok faydalı olacaktır, çünkü bu, keyfi bir inşaat programı çalıştırırsak, programımızın sıkışmayacağı anlamına gelir. Sorun şudur ki bu yapıların hesaplanması Turing'in tamamlanmadığını gösterir.
İkincisi, Turing olmayan tam diller arasında en güçlü dillerden biridir. Temel olarak, bir Turing makinesinin her girişte duracağını kanıtlayabilirseniz, simüle edecek yapıların hesabında bir işlev programlayabilirsiniz. (Bu, turlamayı tamamlamaz, çünkü durduğunu kanıtlayamadığınız turing makineleri vardır.)
Yükleyicinin numarası esasen inşaat hesabı için meşgul bir kunduz numarasıdır, bu da tüm coc programları sona erdiğinden hesaplamak mümkündür.
Özellikle, loader.c adlı bir fonksiyon tanımlar D
. Yaklaşık olarak, D(x)
tüm bit dizelerinden daha az x
tekrarlar, bunları bir coc programı olarak yorumlar, sözdizimsel olarak geçerli olanları çalıştırır ve sonuçları birleştirir ( bit bitleri de olacaktır). Bu birleştirme döndürür.
Yükleyicinin numarası D(D(D(D(D(99)))))
.
Googololoji wiki'sinden kodun daha okunabilir bir kopyası
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)))));}