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)))));}
quelle
Antworten:
JavaScript, D ^ 6 (9) (
508501495492487485481 Byte)Dies ist ein verschlüsselter Code.
Dekodierter Code:
Entschlüsselter, ungelöster Code (Bedingungen und Zeug werden von loader.c aufbewahrt):
Hierbei wird angenommen, dass:
Number
Number
Kodierungs- / Dekodierungsalgorithmus:
Die Kodierung erfolgt wie folgt:
Der Dekodierungsalgorithmus:
Die Komprimierung wurde mit diesem Code durchgeführt . Aktivieren Sie nur das letzte Kontrollkästchen. Da dies die größte Speicherung zuerst codiert, ist es nicht die effizienteste Komprimierung, aber ich weiß auch nicht, wie ich sie verkleinern soll.
JavaScript, (339 Zeichen )
Dieser Code nimmt die 16-Bit-Zeichenfolge als einen, konvertiert sie in eine 8-Bit-Zeichenfolge mit derselben Binärdatei (BE) und
eval
es.Der decodierte Code ist der obige codierte Code.
Beweis, dass D ^ 6 (9)> D ^ 5 (99)
Dazu würden wir D (9) und 99 vergleichen.
Wenn Sie den Code manuell ausführen, ist D (9) gleich
(15*2^14849+1)*2^((15*2^14849+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^929+1)*2^((15*2^929+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^((15*2^59+1)*2^(15*2^59+1))))))))))))))))))))))))))))))))
und sogar D (0) ist gleich8646911284551352321
.Also, D (9) >>> 99, und da D streng zunimmt, gilt D ^ 6 (9)> D ^ 5 (99).
D(D(D(D(D(99)))))
zuD(D(D(D(D(D(9))))))
. Auch das mischte die Buchstaben.&&(1)
fürD(x)
Zustand s - Schleife./2
s zu>>1
s weilNumber
for...in
auffor...of
.eval
für dasD
Entfernenreturn
.quelle
Python 3, D ^ 6 (9) (
608600 Bytes)Dies ist ein verschlüsselter Code. Extrahiert:
Hierbei wird angenommen, dass:
Dies ist im Grunde ein Port meiner JavaScript-Antwort . Weitere Informationen finden Sie in diesem Abschnitt.
Die Kompression wurde mit erledigt dies .
Ich kenne mich in Python nicht sehr gut aus, daher gibt es mit Sicherheit Stellen, an denen Bytes gespart werden können. Ich denke, dass Sub-600 möglich ist.
S
, um Klammern zu reduzierenquelle