Im Anschluss an das kürzeste Abschlussprogramm, dessen Ausgabegröße Grahams Nummer und Golf eine Nummer über TREE (3) übersteigt, stelle ich eine neue Herausforderung dar.
Die Loader-Nummer ist eine sehr große Zahl, die schwer zu erklären ist (da sie selbst das Ergebnis einer Code-Golf-Übung mit einem flexiblen Ziel war). Es gibt eine Definition und Erklärung hier , aber für die Zwecke der Selbsthaltung, werde ich versuchen , es auch in diesem Beitrag später zu erklären.
Der verwendete Algorithmus Ralph Loader erzeugt eine der größten Zahlen aller (berechenbaren) Algorithmen, die jemals geschrieben wurden! In der Tat ist die Loader-Nummer die größte "berechenbare" Nummer im Googology Wiki. (Mit "berechenbarer" Zahl ist eine Zahl gemeint, die im Sinne einer Berechnung definiert wurde.) Das bedeutet, dass Sie hineingehen könnten , wenn die Antwort auf interessante Weise eine Zahl ergibt, die größer ist als die Nummer des Laders (dh nicht nur die Nummer des Laders + 1) Googologie-Geschichte! Davon abgesehen sind Programme, die so etwas wie Loaders Nummer + 1 produzieren, definitiv gültige Antworten und Anwärter auf diese Frage. erwarte einfach keinen Ruhm.
Ihre Aufgabe ist es, ein Abschlussprogramm zu erstellen, das eine Nummer erzeugt, die größer als die Nummer des Loaders ist. Das ist Code-Golf , also gewinnt das kürzeste Programm!
- Sie dürfen keine Eingaben machen.
- Ihr Programm muss schließlich deterministisch beendet werden, Sie können jedoch davon ausgehen, dass der Computer über unendlichen Speicher verfügt.
- Sie können davon ausgehen, dass der Zahlentyp Ihrer Sprache einen beliebigen endlichen Wert enthalten kann , müssen jedoch erläutern, wie dies in Ihrer Sprache genau funktioniert (Beispiel: Hat ein Gleitkomma eine unendliche Genauigkeit?)
- Unendlichkeiten sind als Ausgabe nicht erlaubt.
- Unterlauf eines Zahlentyps löst eine Ausnahme aus. Es wickelt sich nicht um.
- Sie müssen erklären, warum Ihre Nummer so groß ist, und eine unbenutzte Version Ihres Codes angeben, um zu überprüfen, ob Ihre Lösung gültig ist (da es keinen Computer mit genügend Speicher zum Speichern der Loader-Nummer gibt).
Hier ist eine Erklärung der Loader-Nummer. Weitere Informationen finden Sie unter http://googology.wikia.com/wiki/Loader%27s_number und den darin enthaltenen Links. Insbesondere enthält es ein Programm, das die Loader-Nummer exakt (per Definition) erzeugt.
Die Konstruktionsrechnung ist im Wesentlichen eine Programmiersprache mit ganz bestimmten Eigenschaften.
Zunächst wird jedes syntaktisch gültige Programm beendet. Es gibt keine Endlosschleifen. Dies ist sehr nützlich, da es bedeutet, dass unser Programm nicht hängen bleibt, wenn wir ein beliebiges Konstruktionskalkülprogramm ausführen. Das Problem ist, dass dies impliziert, dass die Berechnung der Konstruktionen nicht vollständig ist.
Zweitens ist es unter den nicht-Turing-vollständigen Sprachen eine der mächtigsten. Wenn Sie nachweisen können, dass eine Turing-Maschine bei jeder Eingabe anhält, können Sie im Wesentlichen eine Funktion in der Konstruktionsrechnung programmieren, die diese simuliert. (Dies macht es nicht vollständig, weil es stoppende Maschinen gibt, von denen Sie nicht beweisen können, dass sie anhalten.)
Die Loader-Nummer ist im Wesentlichen eine beschäftigte Bibernummer für die Berechnung von Konstruktionen, die berechnet werden kann, da alle Coc-Programme enden.
Insbesondere definiert loader.c eine aufgerufene Funktion D
. Durchläuft ungefähr D(x)
alle Bitfolgen , die kleiner als sind x
, interpretiert sie als Coc-Programme, führt die syntaktisch gültigen aus und verkettet die Ergebnisse (die auch Bitfolgen sein werden). Es gibt diese Verkettung zurück.
Die Nummer des Laders lautet D(D(D(D(D(99)))))
.
Eine besser lesbare Kopie des Codes aus dem 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)))));}