Seu objetivo é escrever um programa que imprima um número. Quanto maior o número, mais pontos você receberá. Mas tenha cuidado! O comprimento do código é limitado e pesa bastante na função de pontuação. Seu número impresso será dividido pelo cubo do número de bytes que você usou para sua solução .
Então, digamos que você tenha impresso 10000000
e seu código tenha 100
bytes. Sua pontuação final será 10000000 / 100^3 = 10
.
Existem outras regras a serem seguidas, a fim de dificultar um pouco esse desafio.
- Você não pode usar dígitos no seu código (0123456789);
- Você pode usar matemático / físico / etc. constantes, mas apenas se forem menores que 10. (por exemplo, você pode usar Pi ~ = 3,14, mas não pode usar a constante Avogadro = 6e23)
- A recursão é permitida, mas o número gerado precisa ser finito (o infinito não é aceito como solução. Seu programa precisa terminar corretamente, assumindo tempo e memória ilimitados e gerar a saída solicitada);
- Você não pode usar as operações
*
(multiplicar),/
(dividir),^
(poder) nem qualquer outra maneira de indicá-las (por exemplo,2 div 2
não é permitido); - Seu programa pode gerar mais de um número, se você precisar fazer isso . Somente o mais alto contará para pontuação;
- No entanto, você pode concatenar seqüências de caracteres: isso significa que qualquer sequência de dígitos adjacentes será considerada como um único número;
- Seu código será executado como está. Isso significa que o usuário final não pode editar nenhuma linha de código, nem pode inserir um número ou qualquer outra coisa;
- O tamanho máximo do código é 100 bytes.
Entre os melhores
- Steven H. , Pyth ≈ f φ (1,0,0) +7 (256 26 ) / 1000000 [1]
- Arte Simplesmente Bela , Ruby φ f φ 121 (ω) (126) [1]
- Peter Taylor , GolfScript 0 f ε 0 + ω + 1 (17) / 1000 [1]
- res , GolfScript ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126))))))))))) [1]
- Arte Simplesmente Bela , Ruby +1 f ω ω2 +1 (1983)
- eaglgenes101 , Julia ≈ f ω3 (127)
- col6y , Python 3, ≈ (127 → 126 → ... → 2 → 1) / 99 3 [1] [3]
- Toeofdoom , Haskell, ≈ a 20 (1) / 99 3 [1]
- Fraxtil , dc, ≈ 15 ↑ ¹⁶⁶⁶⁶⁶⁵ 15/100 3 [3]
- Magenta , Python, ≈ ack (126,126) / 100 3 ≈ 10 ↑ 124 129
- Kendall Frey , ECMAScript 6, ≈ 10 3 ↑ 4 3 /100 3 [1]
- Ilmari Karonen , GolfScript, ≈ 10 ↑ três 10 377 /18 de 3 [1]
- BlackCap , Haskell, ≈ 10 ↑↑ 65503/100 3
- recursiva , Python, ≈ 2 ↑↑ 11/95 3 ≈ 10 ↑↑ 8.63297 [1] [3]
- nm , Haskell, ≈ 2 ↑↑ 7/100 3 ≈ 10 ↑↑ 4.63297 [1]
- David guinada , C, ≈ 10 10 4 × 10 22 de / 83 3 ≈ 10 ↑↑ 4,11821 [2]
- primo , Perl, ≈ 10 (12750684161!) 5 x 2 27 de / 100 3 ≈ 10 ↑↑ 4,11369
- Arte , C, ≈ 10 10 2 x 10 6 /98 3 ≈ 10 ↑↑ 3,80587
- Robert Sørlie , x86, ≈ 10 2 2 19 +32 / 100 3 ≈ 10 ↑↑ 3.71585
- Tobia , APL, ≈ 10 10 353 /100 3 ≈ 10 ↑↑ 3,40616
- Darren Stone , C, ≈ 10 10 97.61735 / 98 3 ≈ 10 ↑↑ 3.29875
- ecksemmess , C, ≈ 10 2 320 /100 3 ≈ 10 ↑↑ 3,29749
- Adam Speight , vb.net, ≈ 10 5000 × (2 64 ) 4 /100 3 ≈ 10 ↑↑ 3,28039
- Joshua , festa, ≈ 10 10 15 /86 3 ≈ 10 ↑↑ 3,07282
Notas de rodapé
- Se todos os elétrons do universo fossem um qubit e todas as suas superposições pudessem ser usadas de maneira proveitosa para armazenar informações (que, desde que você não precise saber o que está sendo armazenado, é teoricamente possível), esse programa requer mais memória do que poderia possivelmente existe e, portanto, não pode ser executado - agora ou em qualquer ponto concebível no futuro. Se o autor pretender imprimir um valor maior que ≈3 ↑↑ 3,28 de uma só vez, essa condição será aplicada.
- Este programa requer mais memória do que existe atualmente, mas não tanto que não poderia teoricamente ser armazenado em um número escasso de qubits e, portanto, um computador pode existir um dia para executar esse programa.
- Todos os intérpretes atualmente disponíveis emitem um erro de tempo de execução ou o programa falha ao executar como o autor pretendia.
- A execução deste programa causará danos irreparáveis ao seu sistema.
Edit @primo : atualizei uma parte do placar usando uma notação esperançosamente mais fácil de comparar, com decimais para indicar a distância logarítmica até a próxima potência superior. Por exemplo 10 ↑↑ 2,5 = 10 10 √10 . Também alterei algumas pontuações, se considero que a análise do usuário é defeituosa, sinta-se à vontade para contestar qualquer uma delas.
Explicação desta notação:
Se 0 ≤ b < 1
então .a↑↑b = ab
Se b ≥ 1
então .a↑↑b = aa↑↑(b-1)
Se b < 0
então .a↑↑b = loga(a↑↑(b+1))
12e10
(12 * 10 ^ 10) como12*10^10
?500b
, isso é inválido? Ou seja, podemos ignorar todas as coisas não numéricas que um programa imprime? E se sim, algo como50r7
contaria507
?Respostas:
GolfScript; marcar pelo menos f ε_0 + ω + 1 (17) / 1000
Seguindo a sugestão de res de usar a resposta Lifetime de um worm para esta pergunta, apresento dois programas que melhoram bastante sua derivação da solução de Howard.
Eles compartilham um prefixo comum, modulo o nome da função:
calcula
g(g(1)) = g(5)
ondeg(x) = worm_lifetime(x, [x])
cresce aproximadamente como f ε 0 (que res observa, é "a função na hierarquia de rápido crescimento que cresce aproximadamente na mesma taxa que a função Goodstein").O ligeiramente mais fácil (!) De analisar é
.{foo}*
mapeiax
parafoo^x x
.assim dá
g^(g(5)) ( g(5) )
; os 8 níveis adicionais de iteração são semelhantes ao encadeamento de flechas. Para expressar em termos simples: seh_0 = g
eh_{i+1} (x) = h_i^x (x)
depois calculamosh_10 (g(5))
.Eu acho que este segundo programa quase certamente tem uma pontuação muito melhor. Desta vez, o rótulo atribuído à função
g
é uma nova linha (sic).Desta vez, utilizo melhor
^
como uma função diferente.assume
x
a pilha e saix
seguido por uma sequência contendox
cópias de.{
seguido porg
seguido dex
cópias de}*
; em seguida, avalia a sequência. Já que eu tinha um lugar melhor para gravar personagens extras, começamos comj_0 = g
; sej_{i+1} (x) = j_i^x (x)
então a primeira avaliação do^
computaj_{g(5)} (g(5))
(que eu tenho certeza que já supera o programa anterior). Eu então executo^
mais 16 vezes; então sek_0 = g(5)
ek_{i+1} = j_{k_i} (k_i)
então ele calculak_17
. Sou grato (novamente) a res por estimar quek_i
>> f ε_0 + ω + 1 (i).fonte
.{foo}*
mapeiax
parafoo^x (x)
. Se tomarmosh_0 (x) = g^4 (x)
e, emh_{i+1} (x) = h_i^x (x)
seguida, o valor calculado éh_9 (g(3))
. O seuf(x) = g^(4x) (x) = h_0^x (x) = h_1 (x)
.*
funciona. É seguro dizer que h_0 (x) = g ^ 4 (x) >> f_eps_0 (x); consequentemente, a relação h_ {i + 1} (x) = h_i ^ x (x) define efetivamente uma hierarquia de rápido crescimento "acelerada", de modo que h_i (x) >> f_ (eps_0 + i) (x). Ou seja, o número calculado h_9 (g (3)) é certamente muito maior que f_ (eps_0 + 9) (g (3)). Quanto a g (3), acho que posso mostrar que é maior que g_4, o quarto número na sequência g_i usado para definir o número de Graham (que é g_64).j_i ~ f_{eps_0 + i}
; isso fazk_i ~ f_{eps_0 + i omega + i^2}
?k_i ~ f_{ε_0 + ω}^i (k_0)
. Aqui está o raciocínio: k_ {i + 1} = j_ {k_i} (k_i) = j_ω (k_i) ~ f_ {ε_0 + ω} (k_i) ~ f_ {ε_0 + ω} ^ 2 (k_ {i-1}) ... ~ f_ {ε_0 + ω} ^ {i + 1} (k_0), então k_i ~ f_ {ε_0 + ω} ^ i (k_0). Um limite inferior muito conservador em k_i, inteiramente em termos da hierarquia de rápido crescimento, é entãok_i >> f_{ε_0 + ω}^i (i) = f_{ε_0 + ω + 1} (i)
.Windows 2000 - Windows 8 (3907172 / 23³ = 321)
NOTA: NÃO EXECUTE ISTO!
Salve o seguinte em um arquivo em lotes e execute-o como Administrador.
Saída quando executado em uma unidade de 4 TB com o primeiro número impresso em negrito.
fonte
Your printed number will be divided for the number of bytes you used for your solution^3.
GolfScript, pontuação: forma demasiado
OK, qual o número que podemos imprimir em alguns caracteres do GolfScript?
Vamos começar com o seguinte código ( obrigado, Ben! ), Que imprime
126
:Em seguida, vamos repeti-lo 126 vezes, fornecendo um número igual a cerca de 1,26126 × 10 377 :
(Isso é repetição de string, não multiplicação, por isso deve estar de acordo com as regras.)
Agora, vamos repetir esse número de 378 dígitos um pouco mais de 10 377 vezes:
Você nunca verá esse programa terminar, pois ele tenta calcular um número com cerca de 10 380 ≈ 2 1140 dígitos. Nenhum computador já construído poderia armazenar um número tão grande, nem poderia ser construído usando a física conhecida; o número de átomos no universo observável é estimada em cerca de 10 80 , por isso mesmo se pudéssemos de alguma forma usar toda a matéria no universo para armazenar esse número enorme, teremos ainda de alguma forma tem que empinar cerca de 10 380 /10 80 = 10 300 dígitos em cada átomo!
Mas vamos supor que temos o intérprete GolfScript de Deus, capaz de executar esse cálculo, e que ainda não estamos satisfeitos. OK, vamos fazer isso de novo!
A saída deste programa, se pudesse ser concluída, teria cerca de 10 10 383 dígitos e, portanto, seria aproximadamente 10 10 10 383 .
Mas espere! Esse programa está ficando meio repetitivo ... por que não o transformamos em um loop?
Aqui, o corpo do loop é executado cerca de 10 377 vezes, dando-nos uma saída teórica que consiste em cerca de 10 10 × 10 377 dígitos, onde a torre de potências iteradas de 10 tem cerca de 10 377 passos. (Na verdade, isso é uma subestimação grosseira, já que estou negligenciando o fato de que o número repetido também aumenta mais a cada vez, mas, relativamente falando, esse é um problema menor.)
Mas ainda não terminamos. Vamos adicionar outro loop!
Até escrever corretamente uma aproximação de tais números requer notação matemática esotérica. Por exemplo, em notação de seta para cima Knuth , o número (teoricamente) produzido pelo programa acima deve ser cerca de 10 ↑ 3 10 377 , mais ou menos algumas (ou 10 377 ) potências de dez, assumindo que eu fiz as contas corretamente.
Números como esse vão muito além do "incrivelmente grande" e chegam ao reino do "inconcebível". Por exemplo, não só é impossível contar até ou escrever esses números (já ultrapassamos esse ponto no terceiro exemplo acima), mas eles literalmente não têm uso ou existência concebível fora da matemática abstrata. Podemos provar, a partir do axiomas da matemática , que tais números existem, assim como podemos provar a partir da especificação GolfScript que o programa acima os computaria, se os limites da realidade e do espaço de armazenamento disponível não interferissem), mas não há literalmente nada em o universo físico que poderíamos usá-los para contar ou medir em qualquer sentido.
Ainda assim, os matemáticos às vezes fazem uso de números ainda maiores . (Teoricamente), computar números tão grandes exige um pouco mais de trabalho - em vez de apenas aninhar mais loops um por um, precisamos usar a recursão para telescópio a profundidade dos loops aninhados. Ainda, em princípio, deveria ser possível escrever um programa GolfScript curto (bem abaixo de 100 bytes, eu esperaria) para (teoricamente) calcular qualquer número expressável em, digamos, notação de seta encadeada de Conway ; os detalhes são deixados como um exercício. ;-)
fonte
"...No computer ever built could store a number that big...
Corrija-me se estiver errado, mas acho que não se aplica aqui. Não é apenas "repetidamente" armazenando e imprimindo 3 dígitos por vez (?), Portanto não é necessário armazenar o resultado final.JavaScript 44 chars
Isso pode parecer um pouco barato:
alert((Math.PI+''+Math.E).replace(/\./g,""))
Pontuação = 31415926535897932718281828459045/44 ^ 3 ≈ 3,688007904758867e + 26 ≈ 10 ↑↑ 2,1536134004
fonte
"."
para substituir, em vez de/\./g
m=Math,p=m.PI,e=m.E,s="",alert((p*p*p+s+e*e*e).replace(/\./g,s))
, sua pontuação será 3100627668029981620085536923187664/63 ^ 3 = 1,240017943838551e + 28C, escore = 10 10 97,61735 / 98 3 ≈ 10 ↑↑ 2,29874984
Agradeço a ajuda na pontuação. Quaisquer informações ou correções são apreciadas. Aqui está o meu método:
n = a concatenação de cada número de 1 a 2 64 -1, repetida (2 64 -1) 4 vezes . Primeiro, veja como estou estimando (baixo) o número acumulado de dígitos de 1 a 2 64 -1 (a "subsequência"): O número final na sequência de subsequência é 2 64 -1 =
18446744073709551615
com 20 dígitos. Assim, mais de 90% dos números na subsequência (aqueles que começam com1
..9
) têm 19 dígitos. Vamos assumir os 10% restantes em média de 10 dígitos. Será muito mais que isso, mas essa é uma estimativa baixa para matemática fácil e sem trapaça. Essa subsequência é repetida (2 64 -1) 4 vezes, então o comprimentode n terá .pelo menos (0,9 × (2 64 -1) × 19 + 0,1 × (2 64 -1) × 10) × (2 64 -1) 4 = 3,86613 × 10 97 dígitos. Nos comentários abaixo, @primo confirma que o comprimento de n é 4,1433x10 97 . Então n em si será 10 para esse poder, ou 10 10 97.61735eu = 98 caracteres de código
score = n / l 3 = 10 10 97.61735 / 98 3
Requisito: deve ser executado em um computador de 64 bits em que
sizeof(long) == 8
. Mac e Linux farão isso.fonte
'z'
é o valor constante122
. Direito?printf("%d",n)
vai aumentar o número. Além disso, o computador de 64 bits não significa comprimentos de 64 bits, por exemplo, o Windows usa o modelo LLP64 enquanto ainda é de 32 bits0..2^64-1
é de exatamente 357823770363079921190 dígitos. Os(2^64-1)^4
tempos repetidos são 4,1433x10 ^ 97. Tome 10 para esse poder é10^10^97.61735
≈ 10 ↑↑ 3,29875. Eu acho que você está reivindicando uma potência de dez que não possui (observe onde3.866×10^97
se tornou3.866^10^97
.2.0
vez de97
.10^10^10^2.00
=10^10^97.6
. Vou refletir isso na minha pontuação agora.Python 3-99 caracteres - (provavelmente) significativamente maior que o número de Graham
Eu criei uma função que aumenta mais rapidamente com base em uma extensão da função Ackermann.
http://fora.xkcd.com/viewtopic.php?f=17&t=31598 me inspirou, mas você não precisa procurar lá para entender meu número.
Aqui está a versão modificada da função ackermann que usarei na minha análise:
Minha função
A
no código acima tecnicamente não é a mesma, mas na verdade é mais forte, com a seguinte declaração para substituir a terceira linha da definição acima:(a tem que ser pelo menos 1, então deve ser mais forte)
Mas, para meus propósitos, assumirei que é o mesmo que o mais simples, porque a análise já está parcialmente feita para a função de Ackermann e, portanto, para essa função quando ela possui dois argumentos.
Minha função é garantida para parar de recursar, porque sempre: remove um argumento, diminui o primeiro argumento ou mantém o mesmo primeiro argumento e diminui o segundo argumento.
Análise de tamanho
O número de Graham, AFAIK, pode ser representado como
G(64)
usando:Onde um
↑^(n)
b é a notação de seta para cima de knuth.Também:
O número expresso no programa acima é
A(0,1,2,3,4,...,123,124,125)
.Como
g^64(4)
é o número de Graham e, assumindo que minha matemática está correta, é menor queA(1,64,100)
, meu número é significativamente maior que o número de Graham.Aponte quaisquer erros na minha matemática - embora, se não houver, esse deve ser o maior número calculado até o momento para responder a essa pergunta.
fonte
range(ord('~'))
? Você não poderia ter feitorange(125)
por menos bytes, o que permitiria espremer um número maior comorange(A(9,9,9))
?Perl - score ≈ 10 ↑↑ 4.1
Mais uma vez abusando do mecanismo de regex do perl para processar uma quantidade inimaginável de combinações, desta vez usando uma descida recursiva.
Na maior parte interna da expressão, temos uma clara
.
para impedir a recursão infinita e, assim, limitando os níveis de recursão ao comprimento da string.O que vamos terminar é o seguinte:
... repetiu 671088640 vezes, para um total de 12750684161 aninhamentos - o que coloca completamente minha tentativa anterior de 23 envergonha aninhamentos. Notavelmente, o perl nem sequer se engasga com isso (mais uma vez, o uso da memória se mantém estável em cerca de 1,3 GB), embora demore um pouco até que a primeira declaração de impressão seja emitida.
Da minha análise anterior abaixo, pode-se concluir que o número de dígitos de saída será da ordem de (! 12750684161) 671088640 , onde ! K é o fatorial esquerdo de k (consulte A003422 ). Podemos aproximar isso como (k-1)! , que é estritamente menor, mas na mesma ordem de magnitude.
E se perguntarmos wolframalpha :
... o que quase não altera minha pontuação. Eu tinha certeza de que seriam pelo menos 10 ↑↑ 5 . Eu acho que a diferença entre 10 ↑↑ 4 e 10 ↑↑ 4,1 é muito maior do que você imagina.
Perl - pontuação ≈ 10 ↑↑ 4
Abusar o mecanismo perl regex para fazer algumas combinações para nós. O código embutido
(??{print})
seu resultado diretamente no regex. Como$_
é composto inteiramente de2
s (e o resultado deprint
é sempre1
), isso nunca pode corresponder e envia o perl girando por todas as combinações possíveis, das quais existem algumas.Constantes usadas
$^F
- o identificador máximo de arquivos do sistema, normalmente2
.$]
- o número da versão perl, semelhante a5.016002
.$_
é então uma string contendo o dígito2
repetido 671088640 vezes. O uso da memória é constante em cerca de 1,3 GB, a saída começa imediatamente.Análise
Vamos definir P k (n) a ser o número de vezes que a declaração de impressão é executado, onde k é o número de assentamentos, e n é o comprimento da corda mais uma (só porque eu não me sinto como a escrita n + 1 em toda parte).
(.*.*)*
P 2 (n) = [ 2, 8, 28, 96, 328, 1120, 3824, 13056, ... ]
((.*.*)*)*
P 3 (n) = [ 3, 18, 123, 900, 6693, 49926, 372615, 2781192, ... ]
(((.*.*)*)*)*
P 4 (n) = [ 4, 56, 1044, 20272, 394940, 7696008, 149970676, 2922453344, ... ]
((((.*.*)*)*)*)*
P 5 (n) = [ 5, 250, 16695, 1126580, 76039585, 5132387790, 346417023515, 23381856413800, ... ]
(((((.*.*)*)*)*)*)*
P 6 (n) = [ 6, 1452, 445698, 137050584, 42142941390, 12958920156996, ... ]
((((((.*.*)*)*)*)*)*)*
P 7 (n) = [ 7, 10094, 17634981, 30817120348, 53852913389555, ... ]
etc. Em geral, a fórmula pode ser generalizada da seguinte maneira:
Onde
Ou seja, o fatorial esquerdo de k , ou seja, a soma de todos os fatoriais menores que k (consulte A003422 ).
Não consegui determinar os formulários fechados para D k e E k , mas isso não importa muito, se observarmos que
e
Com 23 ninhos, isso nos dá uma pontuação aproximada de:
Isso deve ser quase exato, na verdade.
Mas, para colocar isso em uma notação um pouco mais fácil de visualizar, podemos aproximar a base do expoente interno:
e então o expoente em si:
e depois pergunte a wolframalpha :
que você também pode chamar 10 ↑↑ 4 e terminar com isso.
fonte
Javascript, 10 ↑↑↑↑ 210
100 caracteres:
Com base na observação de que a iteração máxima
f
é o melhor caminho a percorrer, substituí as 13 chamadasf
por 3 níveis de chamada de loops aninhadosf
,z
vezes cada (enquantof
continua aumentandoz
).Estimei a pontuação analiticamente em um pedaço de papel - digitarei se alguém estiver interessado em vê-la.
Pontuação aprimorada: 10 ↑↑ 13
Javascript, com exatamente 100 caracteres, novamente:
Isso melhora minha resposta original de três maneiras:
Definir
z
o escopo global nos impede de digitar ao.z
cada vez.É possível definir um getter no escopo global (janela) e digitar em
f
vez deo.f
.Ter mais iterações
f
vale mais do que começar com um número maior; portanto, em vez de(Math.E+'').replace('.','')
(= 2718281828459045, 27 caracteres), é melhor usar~~Math.E+''
(= 2, 11 caracteres) e usar os caracteres recuperados para chamarf
muitas mais vezes.Como, conforme analisado mais abaixo, cada iteração produz, a partir de um número na ordem de magnitude M , um número maior na ordem de magnitude 10 M , esse código produz após cada iteração
Pontuação: ∼10 10 10 10 10 16 ≈ 10 ↑↑ 6.080669764
Javascript, com exatamente 100 caracteres:
Cada um
o.f
invoca o loop while, para um total de 5 loops. Após apenas a primeira iteração, a pontuação já ultrapassou 10 42381398144233621 . Na segunda iteração, o Mathematica não conseguiu calcular nem o número de dígitos no resultado.Aqui está uma explicação passo a passo do código:
Iniciar
Comece com 2718281828459045 removendo o ponto decimal de
Math.E
.Iteração 1
Concatene a sequência decrescente de números,
para formar um novo número (gigantesco),
Quantos dígitos existem nesse número? Bem, é a concatenação de
No Mathematica,
Em outras palavras, é 2,72⋅10 42381398144233625 .
Fazendo minha pontuação, após apenas a primeira iteração, 2,72⋅10 42381398144233619 .
Iteração 2
Mas isso é apenas o começo. Agora, repita os passos, começando com o número gigantesco ! Ou seja, concatenar a sequência decrescente de números,
Então, qual é a minha nova partitura, Mathematica?
Iteração 3
Repetir.
Iteração 4
Repetir.
Iteração 5
Repetir.
Pontuação analítica
Na primeira iteração, calculamos o número de dígitos na concatenação da sequência decrescente começando em 2718281828459045, contando o número de dígitos em
Essa soma pode ser representada pela fórmula,
em que Z indica o número de partida ( por exemplo 2718281828459045) e ó Z indica a sua ordem de grandeza ( por exemplo, 15, visto que Z ~ 10 15 ). Usando equivalências para somas finitas , o acima pode ser expresso explicitamente como
que, se tomarmos 9 × 10, reduz ainda mais a
e, finalmente, expandindo termos e ordenando-os por ordem decrescente de magnitude, obtemos
Agora, uma vez que estamos apenas interessados na ordem de grandeza do resultado, vamos substituir Z com "um número na ordem de grandeza de O Z ", ou seja, 10 O Z -
Finalmente, o segundo e o terceiro termos são cancelados e os dois últimos podem ser descartados (o tamanho é trivial), deixando-nos com
a partir do qual o primeiro mandato vence.
Reapresentado,
f
pega um número na ordem de magnitude de M e produz um número aproximadamente na ordem de magnitude de M (10 M ).A primeira iteração pode ser facilmente verificada manualmente. 2718281828459045 é um número na ordem de magnitude 15 - portanto,
f
deve produzir um número na ordem de magnitude 15 (10 15 ) ∼ 10 16 . De fato, o número produzido é, de antes, 2,72 × 10 42381398144233625 — ou seja, 10 42381398144233625 × 10 10 16 .Observando que M não é um fator significativo em M (10 M ), a ordem de magnitude do resultado de cada iteração segue um padrão simples de tetração:
Fontes LaTeX
fonte
f
algo como levar o númeroz
ao seu próprio poder. Então é assim↑↑↑
. Claro que a pontuação não é2↑↑↑2
, desculpe ...2↑↑↑5+1
parece mais. Você concorda, devo colocar isso na tabela de classificação?i=o.z;while(i--)...
você não está executando oso.z
tempos do loop , porque ele é baseado em uma variável inteira eo.z
contém uma string maior que o maior inteiro representável, dependendo do tamanho da palavra do intérprete. Supondo que, para seu benefício, seu intérprete não vomite em converter uma string para int,i
iniciará cada vez com seu maior valor inteiro representável, digamos 2 ^ 63, e não com o valor atual deo.z
.APL, 10 ↑↑ 3,4
Aqui está minha tentativa revisada:
Programa de 100 caracteres / byte *, executando no hardware atual (usa uma quantidade desprezível de memória e variáveis int regulares de 32 bits), embora demore muito tempo para concluir.
Você pode realmente executá-lo em um intérprete APL e ele começará a imprimir dígitos. Se for permitido concluir, ele terá impresso um número com 10 × 123456789 44 dígitos.
Portanto, a pontuação é 10 10 × 123456789 44 /100 3 ≈ 10 10 353 ≈ 10 ↑↑ 3,406161
Explicação
⎕D
é uma cadeia constante predefinida igual a'0123456789'
n←⍎⎕D
define n como o número representado por essa sequência: 123456789 (que é <2 31 e, portanto, pode ser usado como uma variável de controle de loop){⍞←⎕D}
imprimirá os 10 dígitos na saída padrão, sem uma nova linha{⍞←⎕D}⍣n
vai fazer isso n vezes (⍣
é o "operador de energia": não é *, /, nem ^, porque não é uma operação matemática, é uma espécie de loop){⍞←n}⍣n⍣n
repetirá a operação anterior n vezes, imprimindo os 10 dígitos n 2 vezes{⍞←n}⍣n⍣n⍣n
vai fazer isso n 3 vezes⍣n
lá, para que ele imprima n 44 vezes a corda'0123456789'
.⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL pode ser escrito na sua própria (legado) de conjunto de caracteres de byte único que mapeia símbolos APL para os 128 valores de bytes superiores. Portanto, para fins de pontuação, um programa de N caracteres que usa apenas caracteres ASCII e símbolos APL pode ser considerado como N bytes.
fonte
100 cubed
(100 ^ 3) para mim.{⍞←⎕D}
para⍞←
que você economiza três bytes que você pode usar para adicionar mais um⍣n
e aumentar⊢n←⍎⎕D
em⌽⍕n←⍎⎕D
80 vezes. Se você permitir a execução⎕PP←17
, use em×⍨
vez de⌽⍕
quase o dobro do número de dígitos impressos.Haskell, pontuação: (2 2 2 65536 -3) / 1000000 ≈ 2 ↑↑ 7 ≈ 10 ↑↑ 4.6329710779
Este programa tem exatamente 100 bytes de código Haskell puro. Ele imprimirá o quarto número de Ackermann, eventualmente consumindo toda a energia, matéria e tempo disponíveis do Universo e além no processo ( excedendo ligeiramente o limite de 5 segundos).
fonte
o=length[]
você recebe um extra!q
no final e economiza um byte em cima disso.Python, 2 ↑↑ 11/830584 ≈ 10 ↑↑ 8.632971 (notação de seta para cima Knuth)
Provavelmente, nenhum computador tem memória suficiente para executar isso com êxito, mas isso não é realmente culpa do programa. Com os requisitos mínimos do sistema atendidos, ele funciona.
Sim, isso está mudando um pouco os valores booleanos.
True
é coagido1
nesse contexto. Python possui números inteiros arbitrários.fonte
print True<<(True<<(True<<(True<<True<<True)))
faz, e isso gera uma string de 19k.t=True
e depois usandot
depois?$python -c 'print True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<True<<True)))))))))' Traceback (most recent call last): File "<string>", line 1, in <module> OverflowError: long int too large to convert to int
GolfScript 3.673e + 374
Eu acho que o
*
é permitido, pois indica repetição de cordas, não multiplicação.Explicação:
'~'(
deixará 126 (o valor ASCII de "~") na pilha. Em seguida, copie o número, converta-o em uma sequência e faça a repetição da sequência 126 vezes. Isso dá o126126126126...
que é aproximadamente1.26 e+377
. A solução tem 7 caracteres, então divida por7^3
, para uma pontuação de aproximadamente3.673e+374
fonte
Ruby, probabilisticamente infinito, 54 caracteres
x é inicializado para 97. Em seguida, iteramos o seguinte procedimento: Gere x números aleatórios entre 0 e 1. Se todos forem iguais, encerre e imprima x. Caso contrário, dobre x e repita. Como os números aleatórios de Ruby têm 17 dígitos de precisão, as chances de terminar a qualquer passo são de 1 in (10e17) ^ x. A probabilidade de terminar em n etapas é, portanto, a soma de x = 1 en de (1 / 10e17) ^ (2 ^ n), que converge para 1 / 10e34. Isso significa que, para qualquer número, não importa quão grande, é extremamente improvável que este programa produza um número menor.
Agora, é claro, a questão filosófica é se um programa que tem menos de 1 em 10 ^ 34 chances de terminar no passo n para qualquer n pode terminar. Se assumirmos não apenas tempo e potência infinitos, mas que o programa tem a capacidade de executar em velocidade crescente a uma taxa que excede a taxa em que a probabilidade de término diminui, podemos, de fato, fazer a probabilidade de terminando por hora t arbitrariamente próximo de 1.
fonte
GolfScript, ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126))))))))))
Isso é vergonhosamente adaptado de outra resposta de @Howard e incorpora sugestões de @Peter Taylor.
Meu entendimento do GolfScript é limitado, mas acredito que os operadores
*
e^
acima não são os operadores aritméticos proibidos pelo OP.(Vou excluí-lo com prazer se @Howard quiser enviar sua própria versão, que sem dúvida seria superior a esta).
Este programa calcula um número que é aproximadamente f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126)))))) ))) - uma iteração nove vezes maior de f ε 0 - em que f ε 0 é a função na hierarquia de rápido crescimento que cresce aproximadamente na mesma taxa que a função Goodstein. (f ε 0cresce tão rápido que as taxas de crescimento da função n (k) de Friedman e das setas encadeadas em Conway com dobra em k são praticamente insignificantes, mesmo em comparação com apenas um único f ε 0 não iterado .)
fonte
'',:o;'oo',:t;
apenas atribui os valores0
parao
e2
parat
; se isso é apenas para solucionar a falta de dígitos, pode ser abreviado fortemente para,:o)):t;
, exceto que não há razão para excluirt
em primeiro lugar, porque você pode escreverexpr:t;{...}:f;[[[t]f]f]f
para[[[expr:t]{...}:f~]f]f
salvar outros 3 caracteres.o
: tenho certeza de que[0 126]f
será maior do que[126]f
você salva um caractere e aumenta a saída. Embora você esteja deixando uma string vazia lá dentro, o que provavelmente quebra as coisas: talvez seja melhor começar #[[,:o'~'=]
[
é desnecessário, pois você não tem mais nada na pilha.dc, 100 caracteres
Com tempo e memória suficientes, isso calculará um número em torno de 15 ↑ ¹⁶⁶⁶⁶⁶⁵ 15. Inicialmente, eu havia implementado a função de hiperoperação , mas ela exigia muitos caracteres para esse desafio, então removi as condições
n = 2, b = 0
en >= 3, b = 0
, transformando an = 1, b = 0
condição emn >= 1, b = 0
.Os únicos operadores aritméticos usados aqui são adição e subtração.
EDIT: como prometido nos comentários, aqui está um detalhamento do que esse código faz:
Como observado, isso se desvia da função de hiperoperação, pois os casos base para multiplicação e superiores são substituídos pelo caso base para adição. Esse código se comporta como se
a*0 = a^0 = a↑0 = a↑↑0 ... = a
, em vez do matematicamente corretoa*0 = 0
ea^0 = a↑0 = a↑↑0 ... = 1
. Como resultado, calcula valores um pouco mais altos do que deveriam, mas isso não é grande coisa, pois estamos buscando números maiores. :)Edição: Acabei de perceber que um dígito entrou no código por acidente, na macro que executa incrementos para
n=0
. Eu o removi substituindo-o por 'F' (15), que tem o efeito colateral de dimensionar cada operação de incremento em 15. Não tenho certeza de quanto isso afeta o resultado final, mas provavelmente é muito maior agora.fonte
Não há mais limite de tempo de execução? OK então.
O programa precisa ser executável em computadores modernos?
Ambas as soluções usam uma compilação de 64 bits, ou
long
seja, um número inteiro de 64 bits.C: superior a 10 (2 64 -1) 2 64 , que é superior a 10 10 355393490465494856447 ≈ 10 ↑↑ 4.11820744
88 caracteres.
Para facilitar essas fórmulas, vou usar
t = 2^64-1 = 18446744073709551615
.main
chamaráf
com um parâmetro det
, que repetirá ost
tempos, sempre que imprimir o valort
e chamarf
com um parâmetro det-1
.Total de dígitos impressos:
20 * t
.Cada uma dessas chamadas
f
com um parâmetro det-1
iterará ost
tempos, imprimindo o valort
e chamando f com um parâmetro det-2
.Total de dígitos impressos:
20 * (t + t*t)
Eu tentei este programa usando o equivalente a números inteiros de 3 bits (eu configurei
i = 8
e fiz a chamada principalf(7)
). Ele atingiu a declaração de impressão 6725600 vezes. Isso funciona bem.7^8 + 7^7 + 7^6 + 7^5 + 7^4 + 7^3 + 7^2 + 7
Portanto, acredito que esta é a contagem final para o programa completo:Total de dígitos impressos:
20 * (t + t*t + t^3 + ... + t^(t-1) + t^t + t^(2^64))
Não sei como calcular (2 64 -1) 2 64 . Esse somatório é menor que (2 64 ) 2 64 , e eu preciso de uma potência de dois para fazer esse cálculo. Portanto, vou calcular (2 64 ) 2 64 -1 . É menor que o resultado real, mas como é um poder de dois, posso convertê-lo para um poder de 10 para comparação com outros resultados.
Alguém sabe como executar esse somatório ou como converter (2 64 -1) 2 64 para 10 n ?
Mas lembre-se, esse é o número de dígitos impressos. O valor do número inteiro é 10 elevado a essa potência, então 10 ^ 10 ^ 355393490465494856447
Este programa terá uma profundidade de pilha de 2 ^ 64. São 2 ^ 72 bytes de memória apenas para armazenar os contadores de loop. São 4 bilhões de terabytes de contadores de loop. Sem mencionar as outras coisas que seriam colocadas na pilha por 2 ^ 64 níveis de recursão.
Editar: corrigiu um par de erros de digitação e usou um valor mais preciso para log2 (10).
Edit 2: Espere um segundo, eu tenho um loop que o printf está fora. Vamos consertar isso. Adicionado inicialização
i
.Edit 3: Dang it, eu estraguei a matemática na edição anterior. Fixo.
Este será executado em computadores modernos, embora não termine tão cedo.
C: 10 ^ 10 ^ 136 ≈ 10 ↑↑ 3,3329100567
98 caracteres.
Isso imprimirá o inverso bit a bit de zero, 2 ^ 64-1, uma vez para cada iteração. 2 ^ 64-1 é um número de 20 dígitos.
Número de dígitos =
20 * (2^64-1)^7
= 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187500Arredondando o comprimento do programa para 100 caracteres, Pontuação = número impresso / 1.000.000
Pontuação = 10 ^ 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187494
fonte
%u
estava imprimindo números de 32 bits mesmo com uma compilação de 64 bits, então acabei dell
criar o hábito de escrever em um compilador de 32 bits.%llu
que serialong long
, e%lu
estaria corretolong
.%u
é sempre de 32 bits,%llu
é sempre de 64 bits, seja compilando como 32 ou 64 bits. No entanto, a solução aqui exige quelong
seja de 64 bits, então você tem razão,%lu
é suficiente.i
.R -
4941 caracteres do código, 4.03624169270483442 * 10 ^ 5928 ≈ 10 ↑↑ 2.576681348irá imprimir [reproduzindo aqui apenas o começo]:
fonte
cat
é uma função estranha, pois o primeiro argumento é...
. Portanto, tudo antes do primeiro argumento nomeado vai para...
(e serácat
'ed), e é por isso quesep
deve ser nomeado - caso contrário, pode-se abreviá-lo comocat(abs(.Random.seed),,"")
ECMAScript 6 - 10 ^ 3 ↑↑↑↑ 3/884736
(3 ↑↑↑↑ 3 é G (1) onde G (64) é o número de Graham)
Saída: 10 ^ 3 ↑↑↑↑ 3
Dicas:
Removida por questões de brevidade.G
é a função em que G (64) é o número de Graham. A entrada é um número inteiro. Saída é uma string unária escrita com 0.K
é a função de seta para cima Knuth a ↑ n b onde a é implicitamente 3. A entrada é n, uma cadeia unária eb, uma cadeia unária. Saída é uma string unária.u
é "1".v
é "0000" ou G (0)e
é "000".fonte
Maximum code length is 100 bytes;
Caso contrário, este é perto imbatívelC
(Com desculpas a Darren Stone)
n = 2 ^ número de 64 dígitos (9 ...)
l = 100 caracteres de código
score ≈ 1e + 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936570 ≈ 10 ↑↑ 3.2974890744
[Pontuação = n ^ 5 / l ^ 3 = (10 ^ (2 ^ 320) -1) / (100 ^ 3) = (10 ^ 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576-1) / (10 ^ 6)]
Note que eu mereço ser açoitado sem piedade por esta resposta, mas não pude resistir. Não recomendo agir como eu na stackexchange, por razões óbvias. :-P
EDIT: Seria ainda mais difícil resistir à tentação de usar algo como
... mas suponho que uma regra pretendida, mas não especificada, fosse que toda a sequência de dígitos que compõe o número fosse impressa.
fonte
)
, mas tudo bem, porque você tem apenas 96 caracteres no momento.Novo Ruby: score ~ f ω ω2 +1 (126 2 2 126 )
onde f α (n) é a hierarquia de rápido crescimento.
Experimente online!
O
*n
são apenas cordas e multiplicação matriz, então eles devem estar bem.Código não destruído:
onde
b.-b<=>0
retorna um número inteiro1
mais próximo do0
queb
.Explicação:
Imprime
n
no início de cada chamada deH
.H[[]]
dobran
(n
vezes), ien = n<<n
.H[[0,a,b,c,...,z]]
chamadasH[[a,b,c,...,z]]
(n
horas).H[[k+1,a,b,c,...,z]]
chamadasH[[k]*n+[a,b,c,...,z]]
(n
horários), onde[k]*n = [k,k,...,k]
.H[[-1,a,b,c,...,z]]
chamadasH[[n]*n+[a,b,c,...,z]]
(n
horas).H[[-(k+1),a,b,c,...,z]]
chamadasH[[-k]*n+[a,b,c,...,z]]
(n
horas).H[k] = H[[k]]
.Meu programa inicializa
n = 126
e depois chamaH[-n-1]
126 2 2 126 vezes.Exemplos:
H[[0]]
chamará oH[[]]
que se aplican = n<<n
(n
horas).H[[0,0]]
chamaráH[[0]]
(n
vezes).H[[1]]
chamaráH[[0]*n]
(n
vezes).H[[-1]]
chamaráH[[n]*n]
(n
vezes).H[[-1,-1]]
chamaráH[[n]*n+[-1]]
(n
vezes).H[[-3]]
chamaráH[[-2]*n]
(n
vezes).Experimente online!
Veja as revisões para outras coisas legais.
fonte
Função Haskell - Ackermann aplicada ao seu resultado 20 vezes - 99 caracteres
Esta é a melhor solução haskell que eu posso criar com base na função ackermann - você pode notar algumas semelhanças com a solução nm, o i = round $ log pi foi inspirado a partir daí e o resto é coincidência: D
Executa a função ackermann em si mesma 20 vezes, iniciando em uma, sendo a sequência
Quanto à estimativa, a Wikipedia diz:
a (m, n) = 2 ↑ m-2 (n + 3) - 3
A partir disso, podemos ver a3 (1) = a (61,61) = 2 ↑ 59 64 + 3, que é claramente maior que g1 = 3 ↑ 4 3, a menos que os 3 no início sejam muito mais importantes do que eu penso. Depois disso, cada nível faz o seguinte (descartando as constantes insignificantes em um n ):
Se estes são aproximadamente equivalentes, então 20 (1) ~ = g 18 . O termo final em n , (a n-1 ) é muito maior que 3, portanto é potencialmente maior que g 18 . Vou ver se consigo descobrir se isso aumentaria uma única iteração e reportaria de volta.
fonte
length"a"
economiza alguns bytes e permite outro.a
código de máquina x86 - 100 bytes (Montado como arquivo .com do MSDOS)
Nota: pode dobrar as regras um pouco
Este programa produzirá 2 (65536 * 8 + 32) noves, que colocariam a pontuação em (10 2 524320 -1) / 1000000
Como contador, este programa usa a pilha inteira (64kiB) mais dois registradores de 16 bits
Código montado:
Montagem:
fonte
C
O tamanho do arquivo é 45 bytes.
O programa é:
E o número produzido é maior que 10 ^ (10 ^ (10 ^ 1.305451600608433)).
O arquivo para o qual eu redirecionei o std está atualmente com mais de 16 Gb e ainda está crescendo.
O programa terminaria em um período de tempo razoável se eu tivesse um computador melhor.
Minha pontuação é incontestável com ponto flutuante de precisão dupla.
fonte
GNU Bash, 10 ^ 40964096² /
80 ^ 3 ≈ 10 ↑↑ 2.072820169C = 4096 em qualquer sistema razoável. SHLVL é um pequeno número inteiro positivo (geralmente 1 ou 2, dependendo de / bin / sh ser bash ou não).
Somente UNIX de 64 bits:
Pontuação: ~ 10 ^ (40964096409640964096 * 40964096409640964096) / 88 ^ 3
fonte
bash -c 'bash -c "echo \$SHLVL"'
stat --printf
não trabalha Tentestat -c %s
C, 10 ^ 10 ^ 2485766 ≈ 10 ↑↑ 3,805871804
Criamos uma matriz de 258048 números inteiros não assinados. Não podia ser comprado sem assinatura, porque isso tornava o programa muito longo. Eles não estão assinados porque eu não quero usar comportamento indefinido, esse código é C adequado (exceto a falta de retorno de main ()) e será compilado e executado em qualquer máquina normal; ele continuará sendo executado por um longo tempo . Esse tamanho é o maior que podemos expressar legalmente sem usar caracteres não-ascii.
Fazemos um loop pela matriz a partir do último elemento. Imprimimos os dígitos de
2^32-1
, incrementamos o elemento e eliminamos o loop se o elemento não tiver sido ajustado para 0. Dessa forma, repetiremos os(2^32 - 1)^254048 = 2^8257536
tempos, imprimindo 10 dígitos de cada vez.Aqui está um código de exemplo que mostra o princípio em um intervalo de dados mais limitado:
O resultado é aproximadamente 10 ^ 10 ^ 2485766 dividido por um milhão, que ainda é aproximadamente 10 ^ 10 ^ 2485766.
fonte
Powershell (2.53e107976 / 72³ = 6.78e107970 ≈ 10 ↑↑ 1.701853371)
Isso leva muito mais que 5 segundos para ser executado.
Ele recupera e concatena o comprimento de bytes de cada arquivo em sua unidade atual. Regex remove quaisquer caracteres que não sejam dígitos.
fonte
0
.-ea(+'')
para reduzir o tamanho (''
convertido em um número0
cujo valor de enumeração éSilentlyContinue
). Você pode usar\D
para a regex de substituição que é a mesma que[^\d]
. E você pode simplesmente usar em%{$_.Length}
vez deselect Length
se livrar dos cabeçalhos das colunas. E então você pode se livrar de-split
e-replace
também, deixando-o com-join(gci \ -ea(+'')-r|%{$_.Length})
37 caracteres mais curtos (também reordenei os parâmetros porque os parênteses são necessários de qualquer maneira por causa de+''
).Python 3, score = ack (126,126) / 100 ^ 3
A função f é a função ackermann, que eu tenho apenas espaço suficiente para chamar.
Edit: anteriormente "else n + 1", que violava as regras do desafio - parabéns a Simply Beautiful Art.
fonte
f(m-g,g)
paraf(m-g,m)
.f(m-g,i)
. Além disso, no final da primeira linha, você usa um número. Eu acredito que você pretendia usarn+g
, e depois vou apontar quen+n
será maior.JavaScript 98 caracteres
gera 2.718e + 239622337 ≈ 10 ↑↑ 2.9232195202
Para pontuação de pouco mais de 2.718e + 239622331 ≈ 10 ↑↑ 2.9232195197
que é o maior que posso fazer sem o navegador travar.
(console.log (a) mostrará a saída completa)
Não execute estes:
produziria 2.718 + e121333054704 ≈ 10 ↑↑ 3.0189898069 (também conhecido como 2.718 * 10 ^ (1.213 * 10 ^ 12) para comparar com a resposta mais longa:
versão mais extrema, se não travar o seu navegador: (80 caracteres)
que criaria um número com o mesmo tamanho de e * 10 ^ (10 ^ 19) ≈ 10 ↑↑ 3.106786869689
Edit: solução original de código atualizado gerada apenas 2.718e + 464
fonte
Caracteres do Python 3: 98, ≈ 10 ↑↑ 256
Usando uma função de argumento variável:
Efetivamente, E decrementa o primeiro argumento enquanto aumenta o restante dos argumentos, exceto que, em vez de colocar -1 nos argumentos, elimina o argumento. Como todo ciclo diminui o primeiro argumento ou diminui o número de argumentos, isso é garantido para terminar. A função crescente usada é int ("% d% d"% (k, k)), que fornece um resultado entre k ** 2 + 2 * k e 10 * k ** 2 + k. Meu código usa o símbolo * - mas não como multiplicação. É usado para trabalhar com números variáveis de argumentos, que eu acho que devem seguir as regras, já que o ponto claro das regras era restringir operações específicas, não os próprios símbolos.
Alguns exemplos de quão grande E fica rapidamente:
Apenas os dois primeiros são executáveis no meu computador em um período de tempo razoável.
Então, E é invocado por
E(*range(ord('~')))
- o que significa:Não tenho muita certeza de quão grande é (tenho tentado aproximar-se sem sucesso) - mas é óbvio que é realmente grande.
Como exemplo, em cerca de doze ciclos, o resultado é: (tecnicamente um pouco mais que)
Estimativa do resultado:
Se aproximarmos o passo crescente
lambda k: 10 * k**2
, a função pode ser descrita comoO importante que estamos fazendo aqui é construir uma torre de potências de dez, para que a pontuação final possa ser aproximada em 10 ↑↑ 256.
Melhor (embora parcial) estimativa de resultado:
Isso usa o mesmo
10 * k**2
que a outra estimativa.Sob a estimativa anterior, seria:
Qual é significativamente menor que o valor real, pois usa em
a**2
vez de2**a
para 10 e usa ema*2
vez de2**a
para b.fonte
C (pontuação ≈ 10 ^ 20 000 000 000 ≈ 10 ↑↑ 3,005558275)
Apesar do
rand()
resultado ser determinístico, porque não há função de semente.fonte
rand()
como condição de encerramento o tornará não determinístico. Além disso, chamarrand()
todas as iterações deve torná-la terrivelmente lenta. Use algo comoLONG_MAX
definido emlimits.h
vez disso.non deterministic
volta, porque não há sementes como você escreveu.~' '
vez derand()
imprimir com%u
? Dois bytes a menos de origem e um valor mais alto.