Einige von Ihnen kennen vielleicht den BigNum Bakeoff , der sehr interessant endete. Das Ziel kann mehr oder weniger so zusammengefasst werden, dass ein C-Programm geschrieben wird, dessen Ausgabe unter bestimmten Einschränkungen und theoretischen Bedingungen am größten ist, z. B. ein Computer, auf dem das Programm ausgeführt werden könnte.
In diesem Sinne stelle ich eine ähnliche Herausforderung dar, die allen Sprachen offen steht. Die Bedingungen sind:
Maximal 512 Bytes .
Das Endergebnis muss in STDOUT gedruckt werden. Das ist deine Punktzahl. Wenn mehrere Ganzzahlen gedruckt werden, werden sie verkettet.
Die Ausgabe muss eine Ganzzahl sein. (Hinweis: Unendlichkeit ist keine ganze Zahl .)
Keine eingebauten Konstanten größer als 10, aber Ziffern / Ziffern sind in Ordnung (z. B. ist die Avogadro-Konstante (als eingebaute Konstante) ungültig, 10000 jedoch nicht.)
Das Programm muss beendet werden, wenn genügend Ressourcen zur Ausführung bereitgestellt werden.
Die gedruckte Ausgabe muss deterministisch sein, wenn genügend Ressourcen für die Ausführung bereitgestellt werden.
Sie erhalten genügend Ganzzahlen oder Bigint, damit Ihr Programm ausgeführt werden kann. Wenn Ihr Programm beispielsweise das Anwenden grundlegender Operationen auf Zahlen unter 10 1.000.000 erfordert, können Sie davon ausgehen, dass der Computer, auf dem dies ausgeführt wird, Zahlen mit mindestens 10 1.000.000 verarbeiten kann . (Hinweis: Ihr Programm kann auch auf einem Computer ausgeführt werden, der Zahlen bis zu 10 2.000.000 verarbeitet. Wenn Sie also nur die maximale Ganzzahl aufrufen, die der Computer verarbeiten kann, führt dies nicht zu deterministischen Ergebnissen.)
Sie erhalten genügend Rechenleistung, damit Ihr Programm in weniger als 5 Sekunden ausgeführt werden kann. (Machen Sie sich also keine Sorgen, wenn Ihr Programm eine Stunde lang auf Ihrem Computer ausgeführt wurde und nicht in Kürze beendet wird.)
Keine externen Ressourcen. Denken Sie also nicht daran, diese Ackermann-Funktion zu importieren, es sei denn, sie ist integriert.
Alle magischen Gegenstände werden vorübergehend von einer großzügigen Gottheit ausgeliehen.
Extrem groß mit unbekannter Grenze
- Steven H , Pyth f 3 + B³F + ω² (256 26 )
wobei B³F die Church-Kleene-Ordnungszahl mit der Grundfolge von ist
B³F[n] = B³F(n), the Busy Beaver BrainF*** variant
B³F[x] = x, ω ≤ x < B³F
Bestenliste:
Einfach schön Kunst , Rubin f & psgr; 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
Steven H , Pyth f ψ (Ω Ω ) + ω² + 183 (256 27! )
Undichte Nonne , Python 3 f ε 0 (9 9 9 )
Fejfo , Python 3 f ω ω 6 (f ω ω 5 (9e999))
Steven H , Python 3 f ω ω + ω² (9 9 9 99 )
Einfach schöne Kunst , Rubin f ω + 35 (9 9 99 )
i .. , Python 2 , f 3 (f 3 (141))
Einige Randnotizen:
Wenn wir Ihre Punktzahl nicht überprüfen können, können wir sie nicht in die Rangliste aufnehmen. Vielleicht möchten Sie also erwarten, Ihr Programm ein wenig zu erklären.
Wenn Sie nicht verstehen, wie groß Ihre Anzahl ist, erklären Sie Ihr Programm und wir werden versuchen, es herauszufinden.
Wenn Sie ein Programm vom Typ Loader verwenden , werde ich Sie in eine separate Kategorie mit dem Namen "Extrem groß mit unbekannter Grenze" einordnen, da die Nummer des Loaders keine nicht triviale Obergrenze in Bezug auf die schnell wachsende Hierarchie für 'hat. Standard-Grundsequenzen.
Zahlen werden über die schnell wachsende Hierarchie eingestuft .
Für diejenigen, die lernen möchten, wie man die schnell wachsende Hierarchie verwendet, um wirklich große Zahlen zu approximieren, hoste ich nur dafür einen Discord-Server . Es gibt auch einen Chatraum: Ordinalität .
Ähnliche Herausforderungen:
Golf eine Nummer größer als TREE (3)
Kürzestes Abschlussprogramm, dessen Ausgabegröße Grahams Zahl überschreitet
Für diejenigen, die einige einfache Programme sehen möchten, die die schnell wachsende Hierarchie für kleine Werte ausgeben, sind sie hier:
Ruby: schnell wachsende Hierarchie
#f_0:
f=->n{n+=1}
#f_1:
f=->n{n.times{n+=1};n}
#f_2:
f=->n{n.times{n.times{n+=1}};n}
#f_3:
f=->n{n.times{n.times{n.times{n+=1}}};n}
#f_ω:
f=->n{eval("n.times{"*n+"n+=1"+"}"*n);n}
#f_(ω+1):
f=->n{n.times{eval("n.times{"*n+"n+=1"+"}"*n)};n}
#f_(ω+2):
f=->n{n.times{n.times{eval("n.times{"*n+"n+=1"+"}"*n)}};n}
#f_(ω+3):
f=->n{n.times{n.times{n.times{eval("n.times{"*n+"n+=1"+"}"*n)}}};n}
#f_(ω∙2) = f_(ω+ω):
f=->n{eval("n.times{"*n+"eval(\"n.times{\"*n+\"n+=1\"+\"}\"*n)"+"}"*n);n}
etc.
Um von f_x
zu gehen f_(x+1)
, fügen wir eine Schleife der hinzu n.times{...}
.
Ansonsten diagonalisieren wir gegen alle vorherigen z
f_ω(1) = f_1(1)
f_ω(2) = f_2(2)
f_ω(3) = f_3(3)
f_(ω+ω)(1) = f_(ω+1)(1)
f_(ω+ω)(2) = f_(ω+2)(2)
f_(ω+ω)(3) = f_(ω+3)(3)
etc.
quelle
Antworten:
Rubin, f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
Dabei ist M die erste Mahlo-Ordnungszahl, X die Chi-Funktion (Mahlo-Kollapsfunktion) und ψ die Ordnungskollapsfunktion.
Probieren Sie es online aus!
Code-Aufschlüsselung:
Mathe-Aufschlüsselung:
f
reduzierta
basierend aufn,b,q
.Die Grundidee ist, ein extrem verschachteltes zu haben
a
und es wiederholt zu reduzieren, bis es sich auf reduzierta=0
. Der Einfachheit halber seiMachen wir uns vorerst nur Sorgen
n
.Für jede ganze Zahl erhalten
k
wirf[k,n]=k-1
, damit wir das sehen könnenWir haben dann für jede
d
,f[[0,d],n]=n
so können wir sehen , dassWir haben dann für jeden
c,d,e
,f[[c,0,e],n]=f[[c,d,0],n]=c
. Beispielsweise,Wir haben dann für
c,d,e
solche, dass es nicht in den vorherigen Fall fällt ,f[[c,d,e],n]=[[c,d,f[e,n]],f[d,n],e]
. Hier wird es langsam kompliziert. Einige Beispiele:Von dort steigt es schnell an. Einige Punkte von Interesse:
Wenn
f
wir schließlich mehr Argumente der Funktion sowie mehr Fälle für das Array einführen, können wir die meisten benannten berechenbaren Notationen übertreffen. Einige besonders bekannte:quelle
Pyth, f ψ (Ω Ω ) + ω 2 +183 (~ 256 27! )
Erfordert keine nicht leere Eingabe, aber der Wert davon wird nicht verwendet.
Erläuterung (für die neue und tatsächlich vernünftig bewertete Version):
Es ist sehr schwer für mich, die Größe zu berechnen, vor allem, weil
es spät am Tag ist und ich mit schnell wachsenden Hierarchien nicht besonders vertraut bin oder wie ich überhaupt versuchen würde, herauszufinden, wie oft Q das durchläuftObwohl ich jetzt mehr über Ordnungszahlen weiß, habe ich noch keine Ahnung, wie ich den Wert der Ordnungszahl berechnen soll, die durch die rekursive Definition in meinem Programm dargestellt wird. Ich würde dem Discord-Server beitreten, aber das steht unter einem Pseudonym. Ich möchte lieber nicht mit meinem richtigen Namen verknüpft werden.y()
Wringer.Leider habe ich wahrscheinlich bereits gegen die Ruby-Antwort verloren, da ich relativ wenig über diese schnell wachsenden Hierarchien weiß. Es ist schwer für mich zu sagen.Ich habe vielleicht die Ruby-Antwort geschlagen, bin mir aber nicht 100% sicher.¯ \ _ (ツ) _ / ¯quelle
27^^^27^^27^^4
oderf<sub>4</sub>(27^^27^^4)) ≈ f<sub>4</sub>(f<sub>3</sub>(f<sub>3</sub>(19)))
.y
Rückgriff gemacht, um zu operieren,y(Q-1)
anstatt nur zu operierenQ
. Wie wirkt sich das auf die Punktzahl aus?y(Q) = L(y(Q-1))
an sich?Pyth, f 3 + σ -1 + ω 2 (256 26 )
Wobei σ m [n] die
m
aufgerufene Busy Beaver-Funktion Σ istn
: σ m [n] = Σ m (n). Die Reihenfolge-1
soll bedeuten, dass der Busy Beaver hier nicht auf einer echten Turingmaschine aufgerufen wird, sondern eine Annäherung mit einem endlichen Wickelband vonQ
Elementen. Dadurch kann das Problem des Anhaltens für diese Programme gelöst werden.Die TL; DR ist, dass dies alle möglichen BrainF ** k-Programme der Länge Q erstellt, sie in einer Umgebung ausführt, in der der Maximalwert einer Ganzzahl Q und die Bandlänge Q ist, und alle Zustände aus diesen Operationen zusammen kompiliert füge (das ist das
3+
) an Q hinzu und wiederhole das Obige auf einer Skala von f ω 2 .Ich habe immer noch ~ die Hälfte der Charaktere, mit denen ich arbeiten kann, wenn ich etwas mehr machen möchte, aber bis wir herausfinden, wo dies ist, lasse ich es einfach so wie es ist.
quelle
Python, f 3 (f 3 (141)), 512 Bytes
Dies ist keine wirklich gültige Antwort, aber ich wollte sie trotzdem posten. Ein kurzer Überblick:
Wie auch immer, ich weiß nicht, ob diese Antwort technisch legal ist, aber es hat Spaß gemacht, sie zu schreiben. Fühlen Sie sich frei, alle Fehler zu bearbeiten, die Sie im Code finden.
quelle
for j in range(f(x)): for j in range(f(x)): x = f(x)
, wenn Sie sogar verschachteln . Begleiten Sie uns in Chat zu diskutieren , warum!Rubin, wahrscheinlich ~ f ω + 35 (9 9 99 )
Probieren Sie es online aus!
Ungefähre mathematische Erklärung:
Das Folgende entspricht ungefähr dem obigen Programm, ist jedoch vereinfacht, damit es leichter zu verstehen ist.
G(0,k) = k
ist unsere Grundfunktion.Zur Bewertung
G(n,k)
nehmenk
und schreiben wir es alsG(n-1,1) + ... + G(n-2,1) + ... + G(0,1)
.Ändern Sie dann alle
G(x,1)
's inG(x,2)
' s und subtrahieren Sie1
vom gesamten Ergebnis.Schreiben Sie es in der obigen Form mit
G(x,2)
where umx<n
und lassen Sie den Rest am Ende. Wiederholen, ändernG(x,2)
zuG(x,3)
usw.Wenn das Ergebnis erreicht ist
-1
, geben Sie die Basis zurück (dieb
, die sich in befinden würdeG(x,b)
.)Beispiele:
G (1,1):
G (1,2):
G (1,3):
G (2,5):
Beim Rechnen habe ich das gefunden
Und darüber hinaus neigt es dazu, ein bisschen haarig zu werden.
Im Allgemeinen haben wir
quelle
Python 3, f ω ω + ω * ω (9 9 9 99 )
Ich werde bald eine Erklärung bekommen.
quelle
Python 3 , ~ f ε 0 (9 9 9 )
Probieren Sie es online aus!
quelle
Python 3, 323 Bytes, g 9e9 (9)
Probieren Sie es online aus!
Erläuterung
Python 3 ist eine wirklich rekursive Sprache. Dies bedeutet, dass eine Funktion nicht nur sich selbst aufrufen kann, sondern auch andere Funktionen als Eingabe- oder Ausgabefunktionen übernehmen kann. Funktionen zu verwenden, um sich selbst zu verbessern, ist das, worauf mein Programm basiert.
f = Lambda x, a: [a (x), e (x) ((x, a)) [1]]
Definition
Definition erklärt
a(x)=9^x
a ist die Basisfunktion, ich habe diese Funktion gewählt, weil x> 0 => a (x)> x`, wodurch Fixpunkte vermieden werden.b(x,f)=a(x), f^x
b ist die allgemeine Verbesserungsfunktion, sie nimmt jede Funktion auf und gibt eine bessere Version davon aus. b kann sogar auf sich selbst angewendet werden:b(x,b)[1]=b^x
b(x,b^x)[1]=b^(x*x)
Aber um die Kraft von
b
zu nutzen, um sich zu verbessernb
, müssen Sie die Ausgabe von b nehmen und als neues b verwenden. Dies ist, was c0 tut:c0(…,f)=f(…,f)
c0(x,b^x)=b^x(x,b^x)[1]>b^(9↑↑x)
die allgemeinere c (n) -Funktion nimmt das n letzte Argument (beginnend mit 0) so
c(1)(…,f,a)=f(…,f,a)
undc(2)(…,f,a,b)=f(…,f,a,b)
.*l
bedeutet, dass l ein Array ist undl[~n]
das letzte Argument n verwendetd(x,b,c,*l)=a(x), c0(x,b), b(x,c0), b(x,f) for f in l
d verwendet c0 zum Aktualisieren von b und b zum Aktualisieren aller anderen Eingabefunktionen (von denen aufgrund der Liste ein beliebiger Betrag vorhanden sein kann)d(x,b,c,d)>9^x,b^x,c^x,d^x
undd²(x,b,c,d)>a²(x), b^(9↑↑x), c^(9↑↑x), d^(9↑↑x)
aber d wird noch besser, wenn Sie es mit c kombinieren:
c0²(x,b,c0,d)=d^x(9^x,b^x,c0^x,d^x)=…
c0(x,b,c0,d,c1)=c1(x,b,c0,d,c1)=d(x,b,c0,d,c1)=9^x,b^x,c0^x,d^x,c1^x
c0²(x,b,c0,d,c1)=c0(9^x,b^x,c0^x,d^x,c1^x)=c1^x(9^x,b^x,c0^x,d^x,c1^x)=…
Je mehr c (x) Sie am Ende hinzufügen, desto mächtiger wird es. Das erste c0 bleibt immer d:
c0(x,b,c0,d,c4,c3,c2,c1)=c1(…)=c2(…)=c3(…)=c4(…)=d(x,b,c0,d,cX,cX-1,…,c3,c2,c1)=…
Das zweite lässt iterierte Versionen zurück:
Wann
d^x
endgültig berechnetc4
wird, wird eine viel iteriertere Version desd
nächsten Males dauern . Wannc4^x
endgültig berechnetc3
wird, wird eine viel iteriertere Version vonc4
... benötigt.Dies erzeugt eine wirklich leistungsstarke Version der Iteration, weil
d
:b
Verwendungc0
c0
Verwendungb
b
Die verbessert sich selbst. Dies bedeutet, dass d leistungsfähiger wird, wenn es stärker iteriert wird.Das Erstellen dieser langen Kette von c ist das, was
e(x)=c0^x(x,b,c0,d,c(a(x)),c(a(x)-1),c(a(x)-2),…,c(3),c(2),c(1))[1]
tut.Es verwendet
c0^x
, um das zu umgehen,c0
was nur geben würded
.Dies
[1]
bedeutet, dass schließlich die zweite Ausgabe von zurückgegeben wirdd^…
. Alsob^…
.Zu diesem Zeitpunkt fiel mir nichts ein, was mit e (x) zu tun hätte, um die Ausgabe signifikant zu erhöhen, außer die Eingabe zu erhöhen.
So
f(x,a)=a(x),e(a(x))(x,a)[1](x)
verwendet dieb^…
erzeugte durche(x)
die Ausgabe eine bessere Basisfunktion und verwendet diese Basisfunktion aufzurufene(x)
mit einem größeren Eingang.g(x)=e(x)(x,f)[1](x,a)[1](x)
verwendet ein Finalee(x)
zum Verschachtelnf
und erzeugt eine wirklich mächtige Funktion.Fgh Annäherung
Ich werde Hilfe brauchen, um diese Zahl mit irgendeiner Art von Fgh zu approximieren.
Alte Version : f ω ω 6 (f ω ω 5 (9e999)), Probieren Sie es online aus! Revisionsverlauf der Erklärung
quelle
f_1(x) = x+x
aber auf lange Sicht ist das nicht so wichtig.x*x
.a2(f_n)~=f_{n+1}
Ruby, f & epsi; 0 2 (5), 271 Bytes
Probieren Sie es online aus!
Dies basiert auf der m (n) -Karte .
Erläuterung:
m[0][f0][k] = f0[f0[...f0[k]...]]
mitk
Iterationen vonf0
.m[1][f0][f1][k] = f0[f0[...f0[f1]...]][k]
mitk
Iterationen vonf0
.m[2][f0][f1][f2][k] = f0[f0[...f0[f1]...]][f2][k]
mitk
Iterationen vonf0
.Im allgemeinen wird
m[n]
in nimmtn+2
Argumente, iteriert das erste Argumentf0
,k
mal auf das zweite Argument, und dann die sich ergebende Funktion auf das dritte Argument gilt (wenn es vorhanden ist ), gilt dann die sich ergebende Funktion auf das vierte Argument (falls vorhanden), etc.Beispiele
m[0][n↦n+1][3] = (((3+1)+1)+1 = 6
Im Allgemeinen
m[0][n↦n+1] = n↦2n
.m[0][m[0][n↦n+1]][3] = m[0][n↦2n][3] = 2(2(2(3))) = 24
Im Allgemeinen
m[0][m[0][n↦n+1]] = n↦n*2^n
.Im Allgemeinen
m[1][m[0]][n↦n+1] = f_ω
in der schnell wachsenden Hierarchie.und die endgültige Ausgabe ist
quelle