Seu objetivo é imprimir (na saída padrão) o maior número possível, usando apenas dez caracteres de código.
- Você pode usar qualquer recurso do seu idioma, exceto as funções de exponenciação incorporadas.
- Da mesma forma, você não pode usar notação científica para inserir um número. (Assim, não
9e+99
.)
- Da mesma forma, você não pode usar notação científica para inserir um número. (Assim, não
- O programa deve imprimir o número sem nenhuma entrada do usuário. Da mesma forma, nenhuma leitura de outros arquivos ou da Web e assim por diante.
- Seu programa deve calcular um único número e imprimi-lo. Você não pode imprimir uma sequência nem o mesmo dígito milhares de vezes.
- Você pode excluir do limite de 10 caracteres qualquer código necessário para imprimir qualquer coisa. Por exemplo, no Python 2, que usa a
print x
sintaxe, você pode usar até 16 caracteres para o seu programa. - O programa deve realmente ter êxito na saída. Se demorar mais de uma hora para rodar no computador mais rápido do mundo, é inválido.
- A saída pode estar em qualquer formato (assim você pode imprimir
999
,5e+100
etc.) - O infinito é um conceito abstrato , não um número. Portanto, não é uma saída válida.
code-challenge
number
busy-beaver
Ypnypn
fonte
fonte
If it takes longer than an hour to run on any computer in the world, it's invalid.
não é objetivo. Eu poderia (teoricamente) fabricação de um computador que leva uma hora de mudar T-estado* 2^x
?Respostas:
Wolfram Language
ack (9!, 9!) =
A saída está na notação de seta.
fonte
ack(99!,9)
é muito, muito maior.Perl,> 1.96835797883262e + 18
Pode não ser a maior resposta ... hoje! Mas espere milênios o suficiente e será!
Editar:
Para abordar alguns dos comentários, por "milênios suficientes", quero dizer, na verdade, centenas de anos.
Para ser justo, se a grande morte por congelamento / calor do universo é como o universo terminará (estimado em aproximadamente 10 100 anos), o valor "final" seria ~ 10 214 , o que certamente é muito menor do que alguns dos outras respostas (porém, "flutuações quânticas aleatórias ou tunelamento quântico podem produzir outro Big Bang em 10 10 56 anos"). Se adotarmos uma abordagem mais otimista (por exemplo, um modelo cíclico ou multiverso), o tempo continuará infinitamente, e assim, algum dia em algum universo, em alguma arquitetura de alto nível, a resposta excederia algumas das outras.
Por outro lado, como apontado,
time
é de fato limitado pelo tamanho de número inteiro / comprimento, portanto, na realidade, algo como~0
sempre produziria um número maior quetime
(isto é, o máximotime
suportado pela arquitetura).Essa não foi a resposta mais séria, mas espero que vocês tenham gostado!
fonte
time
voltas e retornar um número pequeno em algum momento? Depende se é perl de 32 bits ou 64 bits, eu achoWolfram ≅ 2,003529930 × 10 19728
Sim, é uma linguagem! Ele dirige o back-end do popular site Wolfram Alpha. É o único idioma que encontrei onde a função Ackermann é incorporada e abreviada para menos de 6 caracteres.
Em oito caracteres:
Ou ≅ 2,003529930 × 10 19728
ack(4,3)
,ack(5,2)
etc. são muito maiores, mas muito grandes.ack(4,2)
é provavelmente o maior número de Ackermann que pode ser completamente calculado em menos de uma hora.Números maiores são renderizados em forma simbólica, por exemplo:
As regras dizem que qualquer formato de saída é permitido, portanto, isso pode ser válido. Isso é maior que 10 10 19727 , que é maior que qualquer uma das outras entradas aqui, exceto o fatorial repetido.
Contudo,
é maior que o fatorial repetido. O maior número que posso obter em dez caracteres é:
Isso é incrivelmente grande, o Universo não é grande o suficiente para representar uma parte significativa de seus dígitos, mesmo se você fizer registros repetidos do número.
fonte
ack(4,2)+1
solução.ack(4,2)
entrada é inválida. A entrada de linguagem natural da W | A não deve nem contar como uma linguagem de programação. Não é Turing completo, e você não pode escrever nem mesmo programas básicos, como o algoritmo de Euclides. Por esse motivo, não acho que seja uma resposta válida, assim como uma consulta do Google seria.Shell Python2, 3.010.301 dígitos
Calculando o comprimento: Python acrescentará um "L" a esses números longos, para que ele reporte 1 caractere a mais do que o resultado tenha dígitos.
Primeiro e último 20 dígitos:
fonte
9 * 2**9999999
, então alguém poderia argumentar que usa exponenciação.***built-in*** exponentiation functions
não são permitidos, portanto, isso pode se enquadrar nas regras. 1floor(log10(9 * 2**9999999))+1
CJam, 2 × 10 268.435.457
Isso calcula b , definido da seguinte maneira:
a 0 = 10
a n = a n - 1 2
b = 20 × a 28
fundo
Isso segue a mesma ideia da resposta de Claudiu , mas não é baseada nela. Tive uma ideia semelhante que publiquei apenas alguns minutos depois que ele postou a dele , mas a descartei, pois ela não chegou nem perto do limite de tempo.
No entanto, a sugestão do aditsu de atualizar para o Java 8 e minha ideia de usar potências de 10 permitiram ao CJam calcular números além do alcance do GolfScript, o que parece ser devido a alguns bugs / limitações do Ruby Bignum.
Como funciona
CJam, ≈ 8,1 × 10 1.826.751
Leva menos de cinco minutos na minha máquina, então ainda há espaço para melhorias.
Isso calcula um 20 , definido da seguinte maneira:
a 0 = 20
a n = (n × a n - 1 ) 2
Como funciona
fonte
Python 3, 9 * 2 ^ (7 * 2 ^ 33)> 10 ^ 18.100.795.813
9 * 2 ^ (2 ^ 35)> 10 ^ 10.343.311.894Edit: Minha nova resposta é:
Resposta antiga, para a posteridade:
Dez caracteres exatamente.
Estou imprimindo o número em hexadecimal e
Portanto, meu código real é:
Prova de que é executado no tempo especificado e gera um número do tamanho especificado:
Meu número> 10 ^ (15032385538 * log (16))> 10 ^ 18100795813
3 dígitos hexadecimais a menos do que a impressão em wc acima, devido à inicial
0x9
.O Python 3 é necessário porque no python 2
7<<33
seria longo e<<
não demoraria muito como entrada.Não posso usar 9 << (1 << 36) porque:
Portanto, este é o maior número possível de formulários
a<<(b<<cd)
imprimíveis no meu computador.Com toda a probabilidade, a máquina mais rápida do mundo tem mais memória do que eu, então minha resposta alternativa é:
9 * 2 ^ (9 * 2 ^ 99)> 10 ^ (1.7172038461 * 10 ^ 30)
No entanto, minha resposta atual é a maior que alguém já enviou, portanto provavelmente é boa o suficiente. Além disso, tudo isso pressupõe que a troca de bits seja permitida. Parece ser, das outras respostas que o utilizam.
fonte
Qualquer idioma com nomes constantes curtos o suficiente, 18 dígitos aprox.
Eu postaria isso como uma resposta PHP, mas infelizmente
M_PI
torna isso um pouco longo demais! Mas o PHP produz 8.0839634798317E + 17 para isso. Basicamente, abusa da falta de precisão absoluta no PI: pfonte
(/ 99(sin pi))
(14 caracteres). Erro na TI-83:99/sin(π
(8 caracteres) causa divisão por zero. Obras em LibreOffice Calc :=99/SIN(PI(
(10 caracteres, sem contar=
) calcula 808423047055000000. LibreOffice auto-implantes a última duas))
em=99/SIN(PI())
.99/sin(π
cinco bytes ou oito? Eu sei que o TI-BASIC armazena vários comandos como bytes únicos; ésin(
um deles?Haskell
Sem truques:
Indiscutivelmente sem calcular nada:
Adaptando a resposta de Niet :
fonte
floor(infinity)
é um número finito? Que diabos Haskell?isInfinite $ 1 / 0 -- True
. Até onde eu sei, o IEEE 754 define1 / 0
como infinito.1 / 0 == Infinity
,.Powershell - 1.12947668480335E + 42
Multiplica 99 Pebibytes por 9.000.000.000 Pebibytes.
fonte
J (
((((((((9)!)!)!)!)!)!)!)!
)Sim, isso é muito.
10^(10^(10^(10^(10^(10^(10^(10^6.269498812196425)))))))
para não ser muito exato.fonte
!!9x
não imprimia nada na tela. Eu sinceramente duvido que!!!!!!!!9x
vai sempre ser calculado.!!9x
finalmente foi impresso em tela. Estou impressionado que ele realmente calculado o valor, mas ainda não completamente bala 5.K / Kona :
8.977649e2611.774896e308!170
cria um vetor de números de 0 a 1691.6+
adiciona um a cada elemento do vetor e converte em reais (o intervalo é de 1,6 a 170,6)*/
multiplica cada elemento da matriz juntosSe a Kona suportasse a precisão quad, eu poderia fazer
*/9.+!999
e dar a volta 1e2584. Infelizmente, isso não acontece e estou limitado à precisão dupla.método antigo
!99
cria um vetor de números de 0 a 989+
adiciona 9 a cada elemento do vetor (agora varia de 9 a 107)9.*
multiplica cada elemento por 9.0 (convertendo implicitamente em reais, então 81.0 a 963.0)*/
multiplica cada elemento do vetor juntosfonte
HTML, 9999999999
.. acertou em cheio.
fonte
9^9999
impressões9^9999
. Apenas sayin :)PHP_INT_MAX
é de 11Python - Varia de até 13916486568675240 (até o momento)
Não é nada sério, mas achei que seria divertido.
Dentre todas as coisas que tentei,
len
estava conseguindo me identificar de maneira mais consistente.Rendi 13916486568675240 (17 dígitos) no meu computador e 13842722750490216 (também 17 dígitos) neste site . Suponho que seja possível que isso seja tão baixo quanto 0, mas também poderia ir mais alto.
fonte
calculate
nada.*99
parte invoca um cálculo.id(id)
ouid(0j)
, você pode multiplicar por999
vars
sempre fornece o valor mais alto (mas 4 caracteres) seguido porsum
. Useprint(sorted([(id(x),x)for x in[id,len,max,min,str,int,ord,chr,sum,map,abs,all,any,bin,bool,eval,oct,vars,iter,list,set,repr,round,zip,type,pow,dict,dir,hex]])[::-1])
para verificar.Golfscript, 1e + 33.554.432
Computa
10 ^ (2 ^ 25)
, sem usar expoentes, é executado em 96 segundos:Ele pode calcular até
9 ^ (2 ^ 9999)
, se for dado tempo suficiente, mas incrementar o expoente interno em um faz com que ele triplique o tempo, de modo que o limite de uma hora será atingido em breve.Explicação :
Usando uma versão anterior com a mesma ideia:
Dividindo:
A pilha no início de cada bloco consiste em um número, o número atual. Isso começa como
8
. Então:Portanto, a pilha, passo a passo, fica assim:
... etc. Escrito em notação matemática, a progressão é:
fonte
wc
. Vou editar para torná-lo mais clarowc -c
para tornar a saída mais clara10{.*}25
entrega 33.554.434 dígitos e termina em 90 segundos na minha máquina. Não sei por que, mas10{.*}26*
não imprime nada.wxMaxima ~ 3x10 49.948 (ou 10 8.565.705.514 )
Saída é
Não tenho certeza se ele se encaixa perfeitamente nas especificações (particularmente no formato de saída 1), mas posso atingir ainda mais:
Saída é
São aproximadamente 8.565.705.514, que são significativamente maiores que a maioria das principais respostas e foram calculadas em cerca de 2 segundos. A
bfloat
função fornece precisão arbitrária .fonte
Haskell, 4950
Aww cara, isso não é muito! 10 caracteres começam após o cifrão.
fonte
print
? Além disso,9/0.000001
é maior quesum[1..99]
.Qual é a raiz quadrada de 999 (2√ (32)) =?
Dez caracteres exatamente.
fonte
Shell Python,
649539999890001Bate Haskell, não é realmente uma resposta séria.
fonte
calculate
resposta.9**9**9**9
estará correta, pois é um operador aritmético (não função interna).Wolfram Alpha (um site conta como idioma)?
saídas
graças a Cory pela dica de que os espaços funcionam tão bem quanto parens.
fonte
((99!)!)! > 4
nunca retornando.Befunge-93 (1.853.020.188.851.841)
Ainda bem que ninguém fez o Befunge ainda (é o meu nicho), mas caramba, não consigo encontrar nenhum truque inteligente para aumentar o número.
Então é 9 ^ 16.
Multiplica basicamente o valor no topo da pilha consigo mesmo. Portanto, o valor no topo da pilha é:
e
Emite o valor final. Eu estaria interessado em ver se alguém tem alguma idéia melhor.
fonte
Prefiro postar isso como um comentário acima, mas aparentemente não posso, já que sou um noob.
Pitão:
9<<(2<<29)
Eu usaria uma mudança de bits maior, mas o Python parece querer que o operando certo de uma mudança seja um número inteiro não longo. Eu acho que isso se aproxima do máximo teórico:
9<<(7<<27)
O único problema é que eles podem não atender à regra 5.
fonte
Matlab (1.7977e + 308)
O Matlab armazena o valor do maior número de ponto flutuante (precisão dupla) em uma variável chamada
realmax
. Invocá-lo na janela de comando (ou na linha de comando) imprime seu valor:fonte
realmax+1
. Eu tentei por diversão e surpresa, ele retorna exatamente o mesmo número que você (então eu ri quando percebi ...eps(realmax)=1.99584030953472e+292
).Python, ca. 1.26e1388
Dá:
fonte
Pelo menos Python 3.5.0 (64 bits), mais de 10 ^ 242944768872896860
Em um mundo ideal, isso seria
9<<(1<<63)-1
, mas não há bytes suficientes para isso. Esse número é tão grande que requer quase 1 EiB de memória para mantê-lo, o que é um pouco mais do que eu tenho no meu computador. Felizmente, você só precisa usar cerca de 0,2% do espaço de armazenamento do mundo como swap para mantê-lo. O valor em binário é1001
seguido por 8070450532247928832 zeros.Se o Python for lançado para máquinas de 128 bits, o máximo seria
9<<(9<<99)
, o que requer menos de 1 MiYiB de memória. Isso é bom, porque você teria espaço endereçável suficiente para armazenar o interpretador Python e o sistema operacional.fonte
Cubix , 9.670457478596419e + 147 (não concorrente)
Não competir porque o Cubix é mais novo que esse desafio. Você pode testá-lo online aqui , mas observe que ele não imprime o número; você precisará pausar o programa depois que os dois últimos
*
s forem executados para ver o valor na pilha.Como funciona
Cubix é um esolang bidimensional em que o código é envolvido em um cubo. Esse código é exatamente equivalente à seguinte rede de cubos, onde
.
é um no-op:Em seguida, o código é executado, com o ponteiro de instrução (IP) começando no canto superior esquerdo da face mais à esquerda, voltado para a direita.
"
ativa o modo de seqüência de caracteres, onde todos os caracteres encontrados até o próximo"
enviam seus códigos de caracteres para a pilha. O IP envolve todo o código, empurrando três/
s (47), dois*
s (42) e dois.
s (46) para a pilha, antes de sair do modo de string novamente.Aqui é onde fica interessante. O primeiro espelho
/
reflete o IP, então ele está voltado para cima; ele gira em torno do cubo, atingindo os seguintes caracteres:Os três
*
s multiplicam os dois principais itens da pilha. Agora, diferentemente da maioria das linguagens baseadas em pilha em que operadores aritméticos apresentam seus argumentos, o Cubix deixa os valores anteriores na pilha. Então isso significa que isso calcula46*46 = 2116, 46*2116 = 97336, 2116*97336 = 205962976
.Quando o IP atinge
/
novamente, ele é virado para a direita. Em seguida, ele atinge o próximo espelho e segue este caminho:Os dois asteriscos multiplicam os dois itens principais mais uma vez. Em seguida, o espelho direciona o IP novamente e o terceiro espelho repete o processo mais uma vez:
Por fim, o IP deixa a seção de espelho indo para o leste. Os dois asteriscos finais se multiplicam mais duas vezes, deixando um resultado de 9.670457478596419e + 147 na pilha. Isso pode ser impresso
O
, mas não há uma maneira fácil de fazer isso, pois praticamente todos os pontos do cubo já estão sendo usados.fonte
Scala, 2 63 -1
Pobre, pobre Scala. São necessários pelo menos 8 caracteres para obter um
BigInt
valor, o que não deixa espaço suficiente para torná-lo grande.Mas com apenas 7 caracteres do código (contado), podemos imprimir o maior positivo possível
Long
:fonte
Brainf ** k 256 - 2147483647
Se você ignorar o fato de que a maioria dos compiladores e intérpretes gera dados como equivalentes ascii (seja flexível, é o que é;)) , isso retornará o valor máximo do tipo de dados do interpretador / compilador.
Em alguns sistemas, isso é apenas 256, embora em alguns (o meu, por exemplo), esse seja o valor máximo de um número inteiro de 32 bits, ou seja, 2 147 483 647.
Editar:
Imprimirá a mesma coisa em muito menos caracteres
fonte
-1
em intérpretes que usam valores assinados para a fitaPerl, não concorrente
Estou usando isso para destacar um pouco do canto do perl.
O Perl não pode competir com esse porque não possui bignums integrados (é claro que você pode carregar uma biblioteca de bignum).
Mas o que todo mundo sabe não é completamente verdade. Uma função principal, na verdade, pode lidar com grandes números.
O
pack
formatow
pode converter qualquer número natural de tamanho entre base10
e base128
. O número inteiro 128 base é, no entanto, representado como bytes da cadeia. A cadeia de bits passaxxxxxxxyyyyyyyzzzzzzz
a ser os bytes:1xxxxxxx 1yyyyyyy 0zzzzzzz
(cada byte começa com 1, exceto o último). E você pode converter essa string para a base 10 com a descompactação. Então você pode escrever código como:que dá:
Você pode substituir os
4**4
valores maiores até sentir que demora muito ou usa muita memória.Infelizmente, isso é muito longo para o limite desse desafio, e você pode argumentar que o resultado da base 10 é convertido em uma sequência antes de se tornar o resultado, para que a expressão não produza realmente um número. Mas internamente o perl realmente faz a aritmética necessária para converter a entrada na base 10, que eu sempre considerei bastante interessante.
fonte
TI-36 (não 84, 36), 10 bytes, aprox. 9.999985426E99
As calculadoras mais antigas também podem ser programadas;)
69!58.4376
Isso está muito próximo do intervalo máximo que uma calculadora de TI pode exibir:
-1E100<x<1E100
fonte
Perl 6 , 456.574 dígitos
Não há TIO porque leva 2 minutos para ser executado.
fonte