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.
fonte
Respostas:
Ruby, f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
onde M é o primeiro Mahinal 'ordinal', X é a função chi (função de colapso do Mahlo) e ψ é a função de colapso do ordinal.
Experimente online!
Repartição do código:
Divisão Matemática:
f
reduz coma
base emn,b,q
.A idéia básica é ter um extremamente aninhado
a
e reduzi-lo repetidamente até reduzir para baixoa=0
. Para simplificar, deixePor enquanto, vamos nos preocupar apenas
n
.Para qualquer número inteiro
k
, obtemosf[k,n]=k-1
, para que possamos ver queTemos, então, para qualquer
d
,f[[0,d],n]=n
para que possamos ver queTemos, então, para qualquer
c,d,e
,f[[c,0,e],n]=f[[c,d,0],n]=c
. Por exemplo,Temos, então, para
c,d,e
que tal não se enquadre no caso anteriorf[[c,d,e],n]=[[c,d,f[e,n]],f[d,n],e]
,. É aqui que começa a ficar complicado. Alguns exemplos:Ele rapidamente sobe a partir daí. Alguns pontos de interesse:
Eventualmente, a introdução de mais argumentos da
f
função e de mais casos para a matriz nos permite superar a maioria das notações computáveis nomeadas. Alguns particularmente conhecidos:fonte
Pyth, f ψ (Ω Ω ) + ω 2 +183 (~ 256 27! )
Requer qualquer entrada não vazia, mas seu valor não é usado.
Explicação (para a versão nova e com pontuação realmente razoável ):
É muito difícil calcular o tamanho disso, principalmente porque
é tarde e não estou muito familiarizado com hierarquias de rápido crescimento ou como eu tentaria descobrir quantas vezes Q passa peloEmbora agora eu saiba mais sobre ordinais, ainda não tenho idéia de como calcular o valor do ordinal representado pela definição recursiva no meu programa. Eu ingressaria no servidor Discord, mas com um pseudônimo, prefiro não estar vinculado ao meu nome real.y()
espremedor.Infelizmente, como sei relativamente pouco sobre as hierarquias de rápido crescimento, provavelmente já perdi para a resposta do Ruby. É difícil para mim dizer.Posso ter vencido a resposta Ruby, mas não tenho 100% de certeza.¯ \ _ (ツ) _ / ¯fonte
27^^^27^^27^^4
, ouf<sub>4</sub>(27^^27^^4)) ≈ f<sub>4</sub>(f<sub>3</sub>(f<sub>3</sub>(19)))
.y
recursando para operar emy(Q-1)
vez de operar apenasQ
. Como isso afeta a pontuação?y(Q) = L(y(Q-1))
, por si só?Pyth, f 3 + σ -1 + ω 2 (256 26 )
Onde σ m [n] é a função Busy Beaver Σ da ordem
m
chamadan
: σ m [n] = Σ m (n). A ordem-1
é denotar que o Busy Beaver aqui não está sendo chamado em uma verdadeira máquina de Turing, mas sim uma aproximação com uma fita finita deQ
elementos. Isso permite que o problema de parada seja solucionável para esses programas.O TL; DR é que isso cria todos os programas possíveis BrainF ** k de comprimento Q, executa-os em um ambiente em que o valor máximo de um número inteiro é Q e o comprimento da fita é Q e compila todos os estados dessas operações juntos para acrescente (que é
3+
) a Q, repetindo o acima em uma escala de f ω 2 .Eu ainda tenho ~ metade dos personagens para trabalhar, se eu quiser fazer algo mais, mas até descobrirmos onde é que eu vou deixar como está.
fonte
python, f 3 (f 3 (141)), 512 bytes
Esta não é realmente uma resposta válida, mas eu queria publicá-la de qualquer maneira. Um rápido resumo:
Enfim, não sei se essa resposta é tecnicamente legal, mas foi divertido escrever. Sinta-se à vontade para editar os erros encontrados no código.
fonte
for j in range(f(x)): for j in range(f(x)): x = f(x)
, no entanto. Junte-se a nós no chat para discutir o porquê!Ruby, provavelmente ~ f ω + 35 (9 9 99 )
Experimente online!
Explicação matemática aproximada:
O abaixo é aproximadamente igual ao programa acima, mas simplificado para facilitar a compreensão.
G(0,k) = k
é a nossa função básica.Para avaliar
G(n,k)
, pegamosk
e escrevemos comoG(n-1,1) + ... + G(n-2,1) + ... + G(0,1)
.Em seguida, altere todos os
G(x,1)
's paraG(x,2)
' e subtraia1
de todo o resultado.Reescreva-o na forma acima usando
G(x,2)
, wherex<n
e deixe o restante no final. Repita, alterandoG(x,2)
paraG(x,3)
etc.Quando o resultado chegar
-1
, retorne a base (ab
que estariaG(x,b)
.)Exemplos:
G (1,1):
G (1,2):
G (1,3):
G (2,5):
Fazendo algumas contas, descobri que
E além disso, tende a ficar um pouco peludo.
Em geral, temos
fonte
Python 3, f ω ω + ω * ω (9 9 9 99 )
Vou receber uma explicação em breve.
fonte
Python 3 , ~ f ε 0 (9 9 9 )
Experimente online!
fonte
Python 3, 323 bytes, g 9e9 (9)
Experimente online!
Explicação
Python 3 é uma linguagem verdadeiramente recursiva, isso significa que não apenas uma função pode chamar a si mesma, mas também pode ter outras funções como funções de entrada ou saída. O uso de funções para melhorar a si é o que meu programa se baseia.
f = lambda x, a: [a (x), e (x) ((x, a)) [1]]
Definição
Definição explicada
a(x)=9^x
a é a função base, eu escolhi essa função porque x> 0 => a (x)> x`, o que evita pontos fixos.b(x,f)=a(x), f^x
b é a função geral de aprimoramento, aceita qualquer função e gera uma versão melhor dela. b pode até ser aplicado a si mesmo:b(x,b)[1]=b^x
b(x,b^x)[1]=b^(x*x)
mas para usar totalmente o poder de
b
melhorar,b
você precisa pegar a saída de b e usá-la como o novo b, é isso que c0 faz:c0(…,f)=f(…,f)
c0(x,b^x)=b^x(x,b^x)[1]>b^(9↑↑x)
a função c (n) mais geral recebe o último argumento n (começando em 0) so
c(1)(…,f,a)=f(…,f,a)
ec(2)(…,f,a,b)=f(…,f,a,b)
.*l
significa que l é uma matriz el[~n]
aceita o último argumentod(x,b,c,*l)=a(x), c0(x,b), b(x,c0), b(x,f) for f in l
d usa c0 para atualizar b e b para atualizar todas as outras funções de entrada (das quais pode haver qualquer valor devido à lista)d(x,b,c,d)>9^x,b^x,c^x,d^x
ed²(x,b,c,d)>a²(x), b^(9↑↑x), c^(9↑↑x), d^(9↑↑x)
mas d fica ainda melhor se você combiná-lo com c:
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)=…
quanto mais c (x) você adicionar no final, mais poderoso ele se tornará. O primeiro c0 sempre permanece 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)=…
mas o segundo deixa versões iteradas para trás:
Quando
d^x
finalmente for calculado,c4
será necessária uma versão muito mais iterada dad
próxima vez. Quandoc4^x
finalmente for calculado,c3
será necessária uma versão muito mais iterada dec4
,…Isso cria uma versão realmente poderosa da iteração porque
d
:b
usoc0
c0
usob
b
As melhorias melhoram, isso significa que d se torna mais poderoso quando é iterado mais.Criar essa longa cadeia de c é o que
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]
faz.Ele usa
c0^x
para ignorar o quec0
apenas dariad
.O
[1]
meio que retornará a segunda saída ded^…
. entãob^…
.Neste ponto, eu não conseguia pensar em nada com e (x) para aumentar significativamente sua saída, exceto aumentar a entrada.
Portanto,
f(x,a)=a(x),e(a(x))(x,a)[1](x)
usa ob^…
gerado pore(x)
para gerar uma função base melhor e usa essa função base para chamare(x)
com uma entrada maior.g(x)=e(x)(x,f)[1](x,a)[1](x)
usa uma finale(x)
para aninharf
e produz uma função realmente poderosa.Aproximação Fgh
Vou precisar de ajuda para aproximar esse número com qualquer tipo de fgh.
Versão antiga : f ω ω 6 (f ω ω 5 (9e999)), Experimente online! Histórico de revisões de explicação
fonte
f_1(x) = x+x
mas a longo prazo, isso não importa muito.x*x
.a2(f_n)~=f_{n+1}
Ruby, f ε 0 2 (5), 271 bytes
Experimente online!
Isso é baseado no mapa m (n) .
Explicação:
m[0][f0][k] = f0[f0[...f0[k]...]]
comk
iterações def0
.m[1][f0][f1][k] = f0[f0[...f0[f1]...]][k]
comk
iterações def0
.m[2][f0][f1][f2][k] = f0[f0[...f0[f1]...]][f2][k]
comk
iterações def0
.Em geral,
m[n]
receben+2
argumentos, itera o primeiro argumentof0
,k
vezes para o segundo argumento, e, em seguida, aplica-se a função resultante sobre o terceiro argumento (se existir), em seguida, aplica-se a função resultante para o quarto argumento (se existir), etc.Exemplos
m[0][n↦n+1][3] = (((3+1)+1)+1 = 6
Em geral
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
Em geral
m[0][m[0][n↦n+1]] = n↦n*2^n
,.Em geral,
m[1][m[0]][n↦n+1] = f_ω
na hierarquia de rápido crescimento.e a saída final sendo
fonte