Alcuni di voi potrebbero avere familiarità con BigNum Bakeoff , che è finito in modo abbastanza interessante. L'obiettivo può essere più o meno sintetizzato come la scrittura di un programma C il cui output sarebbe il più grande, con alcuni vincoli e condizioni teoriche, ad esempio un computer in grado di eseguire il programma.
Nello stesso spirito, sto proponendo una sfida simile aperta a tutte le lingue. Le condizioni sono:
Massimo 512 byte .
Il risultato finale deve essere stampato su STDOUT. Questo è il tuo punteggio. Se vengono stampati più numeri interi, verranno concatenati.
L'output deve essere un numero intero. (Nota: l' infinito non è un numero intero .)
Nessuna costante incorporata maggiore di 10, ma i numeri / le cifre vanno bene (ad es. La costante di Avogadro (come costante incorporata) non è valida, ma 10000 non lo è).
Il programma deve terminare quando vengono fornite risorse sufficienti per l'esecuzione.
L'output stampato deve essere deterministico se fornito di risorse sufficienti per essere eseguito.
Vengono forniti numeri interi o origini sufficientemente grandi per l'esecuzione del programma. Ad esempio, se il tuo programma richiede l'applicazione di operazioni di base a numeri inferiori a 10 1.000.000 , puoi supporre che il computer che esegue questo può gestire numeri almeno fino a 10 1.000.000 . (Nota: il tuo programma può anche essere eseguito su un computer che gestisce numeri fino a 10 2.000.000 , quindi semplicemente chiamando il numero intero massimo che il computer può gestire non porterà a risultati deterministici.)
Viene fornita una potenza di elaborazione sufficiente per consentire al programma di terminare l'esecuzione in meno di 5 secondi. (Quindi non preoccuparti se il tuo programma è in esecuzione da un'ora sul tuo computer e non finirà presto.)
Nessuna risorsa esterna, quindi non pensare di importare quella funzione Ackermann a meno che non sia integrata.
Tutti gli oggetti magici vengono temporaneamente presi in prestito da una divinità generosa.
Estremamente grande con limite sconosciuto
- Steven H , Pyth f 3 + B³F + ω² (256 26 )
dove B³F è l'ordinale Church-Kleene con la sequenza fondamentale di
B³F[n] = B³F(n), the Busy Beaver BrainF*** variant
B³F[x] = x, ω ≤ x < B³F
Classifica:
Arte semplicemente meravigliosa , Ruby f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
Steven H , Pyth f ψ (Ω Ω ) + ω² + 183 (256 27! )
Leaky Nun , Python 3 f ε 0 (9 9 9 )
fejfo , Python 3 f ω ω 6 (f ω ω 5 (9e999))
Steven H , Python 3 f ω ω + ω² (9 9 9 99 )
Arte semplicemente meravigliosa , Ruby f ω + 35 (9 9 99 )
i .. , Python 2 , f 3 (f 3 (141))
Alcune note a margine:
Se non possiamo verificare il tuo punteggio, non possiamo metterlo in classifica. Quindi potresti aspettarti di spiegare un po 'il tuo programma.
Allo stesso modo, se non capisci quanto è grande il tuo numero, spiega il tuo programma e proveremo a risolverlo.
Se utilizzi un tipo di programma di Loader , ti inserirò in una categoria separata chiamata "Estremamente grande con limite sconosciuto" , poiché il numero di Loader non ha un limite superiore non banale in termini di gerarchia in rapida crescita per " sequenze fondamentali standard.
I numeri verranno classificati tramite la gerarchia in rapida crescita .
Per coloro che desiderano imparare a utilizzare la gerarchia in rapida crescita per approssimare numeri molto grandi, sto ospitando un server Discord proprio per questo. C'è anche una chat room: l' ordinalità .
Sfide simili:
Golf un numero più grande di TREE (3)
Programma di chiusura più breve la cui dimensione di output supera il numero di Graham
Per coloro che vogliono vedere alcuni semplici programmi che producono la gerarchia in rapida crescita per piccoli valori, eccoli qui:
Rubino: gerarchia in rapida crescita
#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}
eccetera.
Per passare da f_x
a f_(x+1)
, aggiungiamo un loop di n.times{...}
.
Altrimenti, stiamo diagonalizzando contro tutti i precedenti, ad es
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)
eccetera.