Alguns de vocês podem estar familiarizados com o BigNum Bakeoff , que acabou sendo bastante interessante. O objetivo pode ser resumido mais ou menos como escrever um programa em C cuja saída seria a maior, sob algumas restrições e condições teóricas, por exemplo, um computador que poderia executar o programa.
No mesmo espírito, estou apresentando um desafio semelhante aberto a todas as línguas. As condições são:
512 bytes no máximo .
O resultado final deve ser impresso em STDOUT. Esta é a sua pontuação. Se vários números inteiros forem impressos, eles serão concatenados.
A saída deve ser um número inteiro. (Nota: O infinito não é um número inteiro .)
Nenhuma constante interna maior que 10, mas números / dígitos são bons (por exemplo, a constante de Avogadro (como uma constante interna) é inválida, mas 10000 não é.)
O programa deve terminar quando houver recursos suficientes para ser executado.
A saída impressa deve ser determinística quando houver recursos suficientes para ser executada.
Você recebe números inteiros ou bigints suficientes para o seu programa executar. Por exemplo, se o seu programa exigir a aplicação de operações básicas a números menores que 10.000.000 , você pode assumir que o computador executando isso pode lidar com números de pelo menos 10.000.000 . (Observação: seu programa também pode ser executado em um computador que lida com números de até 10.000.000 , portanto, simplesmente chamar o número inteiro máximo que o computador pode manipular não resultará em resultados determinísticos.)
Você recebe energia computacional suficiente para o seu programa concluir a execução em menos de 5 segundos. (Portanto, não se preocupe se o seu programa estiver em execução há uma hora no seu computador e não for concluído tão cedo.)
Como não há recursos externos, não pense em importar a função Ackermann, a menos que seja interna.
Todos os itens mágicos estão sendo emprestados temporariamente de uma divindade generosa.
Extremamente grande com limite desconhecido
- Steven H , Pyth f 3 + B³F + ω² (256 26 )
onde B³F é o ordinal Church-Kleene com a sequência fundamental de
B³F[n] = B³F(n), the Busy Beaver BrainF*** variant
B³F[x] = x, ω ≤ x < B³F
Entre os melhores:
Arte Simplesmente Bela , Ruby f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
Steven H , Pyth f ψ (Ω Ω ) + ω² + 183 (256 27! )
Freira com vazamento , 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 Simplesmente Bela , Ruby f ω + 35 (9 9 99 )
i .. , Python 2 , f 3 (f 3 (141))
Algumas notas laterais:
Se não podemos verificar sua pontuação, não podemos colocá-la na tabela de classificação. Então, você pode querer explicar um pouco o seu programa.
Da mesma forma, se você não entender o tamanho do seu número, explique seu programa e tentaremos resolvê-lo.
Se você usar um tipo de programa do Loader , colocarei você em uma categoria separada chamada "Extremamente grande com limite desconhecido" , pois o número do Loader não possui um limite superior não trivial em termos da hierarquia de rápido crescimento para ' seqüências fundamentais do padrão.
Os números serão classificados pela hierarquia de rápido crescimento .
Para aqueles que gostariam de aprender a usar a hierarquia de rápido crescimento para aproximar números realmente grandes, estou hospedando um servidor Discord apenas para isso. Há também uma sala de bate-papo: Ordinality .
Desafios semelhantes:
Golf um número maior que a TREE (3)
Programa de terminação mais curto, cujo tamanho de saída excede o número de Graham
Para aqueles que querem ver alguns programas simples que geram uma hierarquia de rápido crescimento para valores pequenos, aqui estão eles:
Ruby: hierarquia em rápido crescimento
#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.
Para passar de f_x
para f_(x+1)
, adicionamos um loop do n.times{...}
.
Caso contrário, estamos diagonalizando contra todos os anteriores, por exemplo
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.