Esta é uma tarefa um pouco diferente. Calcule 1024 dígitos hexadecimais de π, começando no 1024º lugar hexadecimal.
Formalmente: seu programa deve ser concluído em menos de 1 minuto e produzir a seguinte saída:
25d479d8f6e8def7e3fe501ab6794c3b976ce0bd04c006bac1a94fb6409f60c45e5c9ec2196a246368fb6faf3e6c53b51339b2eb3b52ec6f6dfc511f9b30952ccc814544af5ebd09bee3d004de334afd660f2807192e4bb3c0cba85745c8740fd20b5f39b9d3fbdb5579c0bd1a60320ad6a100c6402c7279679f25fefb1fa3cc8ea5e9f8db3222f83c7516dffd616b152f501ec8ad0552ab323db5fafd23876053317b483e00df829e5c57bbca6f8ca01a87562edf1769dbd542a8f6287effc3ac6732c68c4f5573695b27b0bbca58c8e1ffa35db8f011a010fa3d98fd2183b84afcb56c2dd1d35b9a53e479b6f84565d28e49bc4bfb9790e1ddf2daa4cb7e3362fb1341cee4c6e8ef20cada36774c01d07e9efe2bf11fb495dbda4dae909198eaad8e716b93d5a0d08ed1d0afc725e08e3c5b2f8e7594b78ff6e2fbf2122b648888b812900df01c4fad5ea0688fc31cd1cff191b3a8c1ad2f2f2218be0e1777ea752dfe8b021fa1e5a0cc0fb56f74e818acf3d6ce89e299b4a84fe0fd13e0b77cc43b81d2ada8d9165fa2668095770593cc7314211a1477e6ad206577b5fa86c75442f5fb9d35cfebcdaf0c7b3e89a0d6411bd3ae1e7e4900250e2d2071b35e226800bb57b8e0af2464369bf009b91e5563911d59dfa6aa78c14389d95a537f207d5ba202e5b9c5832603766295a
O programa com o menor comprimento vence. Você precisa calcular todos os dígitos em tempo de execução. Você não precisa implementar o algoritmo que calcula π; se o seu idioma já fornecer essa funcionalidade, você poderá usá-lo.
fonte
Respostas:
Sálvia, 29 caracteres
Tecnicamente, isso não é trapaça, pois os dígitos são calculados em tempo de execução. Dito isto, ainda é barato como o inferno.
fonte
Utilitários de shell: 48
curl -sL ow.ly/5u3hc|grep -Eom 1 '[a-f0-9]{1024}'
fonte
curl -sL ow.ly/shKGY|grep -Po \\w{99,}
(37). Funciona no Dash. O Bash precisaria de um byte adicional.J,
156, 140, 137127Usando a fórmula BBP.
Does NOT executar em menos de um minuto (mas temos uma resposta J: p)
Exemplo para os primeiros 104 dígitos de π (isso é rápido):
fonte
#:
não produzirá dígitos hexadecimais.(... 16 #:) Pi
? Acho que não temos dígitos suficientes, então precisamos gerá-los de qualquer maneira.hfd
converter números em hexadecimal.JavaScript, 536
(Quebras de linha e recuo apenas para legibilidade)
Demora cerca de 25 segundos, no Google Chrome 14 no meu laptop usando o Intel i5 core. Alguém pode jogar golfe esse código? Eu não posso jogar bem .. :(
Abaixo é não-golfe. Acabei de remover todos os comentários e alterei o loop para o golfe.
Não mencione
for(;s>=b;s-=b);s*=16;
. Eu mudei paras=(s%b)*16
. : PEDIT: Removida a função totalmente não utilizada. (Por que guardei isso?: /)
PS. Primeiros 100 dígitos do PI
243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c89452821e638d01377be5466cf34e90c6cc0ab
fonte
d='0123456789abcdef',l=3e3,p=Array(l+1).join(2),o='',c=0,e='length';d+=d;function _(a,b,s){for(i=(a[e]>b[e]?a[e]:b[e])-1,r='',c=0;i+1;r=d[Z=F(b,i,1)+c,k=F(a,i,1)+(s?Z:16-Z),c=s?k>15:k<16,k]+r,i--);return r}function F(a,b,f){if(f)f=a[e]>b?d.indexOf(a[b]):0;else{for(i=0,f='',s=16;i++<l;f+=d[~~(s/b)],s=(s%b)*16);while(a--)f=_(f,f,1)}return f}for(j=0;++j<l;p=_(p,(o+='0')+_(_(_(F(2,z=8*j+1),F(1,z+3)),F(0,z+4)),F(0,z+5)),1));console.log(p.slice(1024,2048))
_
em favor do,
operador. A mais complicada é a fusão de uma função$
eg
uma, com um argumento opcional para selecionar entre elas.function
ereturn
são ambos muito caros, portanto, umaif(f)...else
e duas,1
é uma troca razoável.PHP
116114 bytesEsta solução calcula todos os pi até 2048 dígitos hexadecimais, quatro dígitos hexadecimais por vez e gera a última metade deles. O tempo de execução é inferior a 5 segundos. A fórmula usada para o cálculo é a seguinte:
A precisão é obtida armazenando os restantes em uma matriz e continuando cada uma das 2 ^ 14 divisões incrementalmente.
Python 64 bytes
O mesmo método acima. É executado em cerca de 0,2s.
Ou como uma linha em 73 bytes :
fonte
PARI / GP-2.4, 141
Usando a fórmula de Bailey – Borwein – Plouffe (é claro).
É executado em menos de um minuto.
fonte
Código C:
tempo de execução = 8,06 segundos em um Intel Quad core
fonte
printf("%X",(int)gA)
vez dessa longa lista.PARI / GP - 40 bytes
Esta versão 'engana' usando
\x
para exibir os dígitos hexadecimais do resultado.Esta versão leva 87 bytes para converter em hexadecimal da maneira usual.
Ambas as versões são executadas em uma pequena fração de segundo.
fonte
Perl - 59
Menos de 0,1s.
fonte
Shell 68
ferramentas: bc -l, tr, cut
Shell 64, ferramentas: bc -l, tr, tail, diferem no arredondamento do último lugar
Pode ser considerado trapaça, já que o conhecimento de como calcular IP está em 4 * a (1), e que eu tenho que usar a escala = 2466 foi investigado de forma iterativa.
Obrigado ao breadbox pela ideia de usar o cut.
fonte
dd
comandotail -c1024
para salvar alguns caracteres.dd
withcut -c1027-2051
. (O escudo tem muitas ferramentas para manipular fluxos de texto.)