Calcular 500 dígitos de pi


25

Escreva um programa para calcular os primeiros 500 dígitos do pi, atendendo às regras abaixo:

  • Ele deve ter menos de 500 caracteres.
  • Ele não pode incluir constantes "pi", "math.pi" ou pi semelhantes, nem pode chamar uma função de biblioteca para calcular pi.
  • Não pode usar os dígitos "3", "1" e "4" consecutivamente.
  • Ele deve ser executado em um tempo razoável (menos de 1 minuto) em um computador moderno.

O programa mais curto vence.


Para verificar se seus dígitos estão corretos: eveandersson.com/pi/digits
— Nellius

É permitido imprimir mais de 500 dígitos com perda de precisão após os primeiros 500?
— Alexandru

@ Alexandru, suponho que sim, mas eu preferiria vê-lo truncado.
— Thomas O

@ Joey nenhuma função de biblioteca PARA CALCULAR O PI - Eu diria que você pode usar qualquer coisa das bibliotecas, exceto a constante / função do PI.
— Aurel Bílý

1
Podemos usar uma biblioteca HTTP para baixar um site "digits of pi"? ;-)
— dan04 17/02

Respostas:


11

Golfscript - 29 caracteres

6666,-2%{2+.2/@*\/9)499?2*+}*

Postarei a análise mais tarde


5
Você poderia explicar como isso funciona?
— Thomas O

65
"Vou postar a análise mais tarde". (aguarda 3 anos) .... #
— 2626 Justin Justin

14
"Vou publicar a análise mais tarde" * aguarda mais de 6 anos *
— Erik the Outgolfer

1
@EriktheOutgolfer eu ia postar isso. : P
— Christopher

1
"Postarei a análise mais tarde" (aguarda 8 anos)
— Jono 2906

8

Mathematica (34 caracteres): (sem "trapaça" com trig)

N[2Integrate[[1-x^2]^.5,-1,1],500]

Então, para explicar a mágica aqui:
Integrate[function, lower, upper]fornece a área sob a curva "função" de "inferior" a "superior". Nesse caso, essa função é [1-x^2]^.5, que é uma fórmula que descreve a metade superior de um círculo com raio 1. Como o círculo possui um raio de 1, ele não existe para valores de x menores que -1 ou maiores que 1. Portanto, estamos encontrando a área de metade de um círculo. Quando multiplicamos por 2, obtemos a área dentro de um círculo de raio 1, que é igual a pi.


Talvez você deva inserir, em sua resposta, uma explicação de por que isso funciona (para pessoas que não são de matemática).
— 26714 Justin

ideia maravilhosa. Vou cuidar disso agora. Vou dar uma explicação básica da matemática envolvida.
— Stack Tracer

Talvez você possa abreviá-lo: mude sqrt[1-x^2]para(1-x^2)^.5)
— Justin

e posso remover o * após o 2. Mathematica é maravilhoso.
— Pilha Tracer

4

Python (83 caracteres)

P=0
B=10**500
i=1666
while i:d=2*i+1;P=(P*i%B+(P*i/B+3*i)%d*B)/d;i-=1
print'3.%d'%P

3

PARI / GP, 14

\p500
acos(-1)

Você pode evitar triggers, substituindo a segunda linha por

gamma(.5)^2

ou

(6*zeta(2))^.5

ou

psi(3/4)-psi(1/4)

ou

4*intnum(x=0,1,(1-x^2)^.5)

ou

sumalt(k=2,(-1)^k/(2*k-3))*4

2

bc -l (22 = 5 linha de comando + 17 programa)

scale=500
4*a(1)

5
As regras dizem "nem pode chamar uma função de biblioteca para calcular pi".
— Peter Taylor

@ Peter O problema, eu acho, é que "função de biblioteca" nem sempre é um termo bem definido, e só piora quando você diz "calcular Pi", pois você pode usá-lo para calcular resultados intermediários, por exemplo, Sqrt () na resposta de Alexandru.
— Dr. belisarius

Eu acho que isso é trapaça, porque o atan calcula 1/4 pi, mas é uma solução interessante.
— Thomas O

1
@ Thomas O: se isso é trapaça, onde está o limite?
— JB


1

Python3 136

Usa a fórmula de Madhava .

from decimal import *
D=Decimal
getcontext().prec=600
p=D(3).sqrt()*sum(D(2-k%2*4)/3**k/(2*k+1)for k in range(1100))
print(str(p)[:502])

Python3 164

Usa esta fórmula.

from decimal import *
D=Decimal
getcontext().prec=600
p=sum(D(1)/16**k*(D(4)/(8*k+1)-D(2)/(8*k+4)-D(1)/(8*k+5)-D(1)/(8*k+6))for k in range(411))
print(str(p)[:502])

1

Mathematica - 50

½ = 1/2; 2/Times @@ FixedPointList[(½ + ½ #)^½~N~500 &, ½^½]

1

Pyth , 21

u+/*GHhyHy^T500r^3T1Z

Usa este algoritmo: pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))encontrado nos comentários da resposta Golfscript.


Isso não merece um voto negativo ...
— Decay Beta 26/10

Esta resposta está incorreta, gera 34247779 ... que, pelo que sei, não é pi.
— orlp

@orlp A roperação foi alterada recentemente de uma maneira que quebrou esta resposta. Altere 1para a 0e funcionará no Pyth atual.
— Isaacg

0

Axioma, 80 bytes

digits(503);v:=1./sqrt(3);6*reduce(+,[(-1)^k*v^(2*k+1)/(2*k+1)for k in 0..2000])

para referência https://tuts4you.com/download.php?view.452 ; seria uma estimativa para 6 * arctg (1 / sqrt (3)) =% pi e usaria a expansão da série para arctg

  3.1415926535 8979323846 2643383279 5028841971 6939937510 5820974944 592307816
  4 0628620899 8628034825 3421170679 8214808651 3282306647 0938446095 505822317
  2 5359408128 4811174502 8410270193 8521105559 6446229489 5493038196 442881097
  5 6659334461 2847564823 3786783165 2712019091 4564856692 3460348610 454326648
  2 1339360726 0249141273 7245870066 0631558817 4881520920 9628292540 917153643
  6 7892590360 0113305305 4882046652 1384146951 9415116094 3305727036 575959195
  3 0921861173 8193261179 3105118548 0744623799 6274956735 1885752724 891227938
  1 8301194913 01

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.