25
\$\begingroup\$

Write a program to calculate the first 500 digits of pi, meeting the rules below:

  • It must be less than 500 characters in length.
  • It cannot include "pi", "math.pi" or similar pi constants, nor may it call a library function to calculate pi.
  • It may not use the digits "3", "1" and "4" consecutively.
  • It must execute in a reasonable time (under 1 minute) on a modern computer.

The shortest program wins.

\$\endgroup\$
  • \$\begingroup\$ To check if your digits are correct: eveandersson.com/pi/digits \$\endgroup\$ – Nellius Feb 4 '11 at 15:07
  • \$\begingroup\$ Are we allowed to print more than 500 digits with loss of accuracy after first 500? \$\endgroup\$ – Alexandru Feb 4 '11 at 15:27
  • \$\begingroup\$ @Alexandru, I suppose so but I would prefer to see it truncated. \$\endgroup\$ – Thomas O Feb 4 '11 at 17:16
  • \$\begingroup\$ @Joey no library functions TO CALCULATE PI - I would assume you can use anything from the libraries except the PI constant / function. \$\endgroup\$ – Aurel Bílý Feb 5 '11 at 21:27
  • 1
    \$\begingroup\$ Can we use an HTTP library to download a "digits of pi" website? ;-) \$\endgroup\$ – dan04 Feb 17 '11 at 5:47

10 Answers 10

10
\$\begingroup\$

Golfscript - 29 chars

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

I will post analysis later

\$\endgroup\$
  • 5
    \$\begingroup\$ Could you explain how this works? \$\endgroup\$ – Thomas O Feb 4 '11 at 13:48
  • \$\begingroup\$ Shouldn't last digit be 2 instead of 1? \$\endgroup\$ – Alexandru Feb 4 '11 at 17:34
  • 61
    \$\begingroup\$ "I will post analysis later". (waits for 3 years).... \$\endgroup\$ – Justin Feb 26 '14 at 3:40
  • 13
    \$\begingroup\$ "I will post analysis later" *waits for more than 6 years* \$\endgroup\$ – Erik the Outgolfer Apr 24 '17 at 10:42
  • 1
    \$\begingroup\$ @EriktheOutgolfer I was going to post that. :P \$\endgroup\$ – Christopher Apr 25 '17 at 0:53
8
\$\begingroup\$

Mathematica (34 chars): (without "cheating" with trig)

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

So, to explain the magic here:
Integrate[function, lower, upper] gives you the area under the curve "function" from "lower" to "upper". In this case, that function is [1-x^2]^.5, which is a formula that describes the top half of a circle with radius 1. Because the circle has a radius of 1, it does not exist for values of x lower than -1 or higher than 1. Therefore, we are finding the area of half of a circle. When we multiply by 2, then we get the area inside of a circle of radius 1, which is equal to pi.

\$\endgroup\$
  • \$\begingroup\$ Perhaps you should insert, in your answer, an explanation of why this works (for them non-math folks). \$\endgroup\$ – Justin Feb 26 '14 at 3:31
  • \$\begingroup\$ wonderful idea. I will see to it presently. I'll give a basic explanation of the math involved. \$\endgroup\$ – Stack Tracer Feb 26 '14 at 3:31
  • \$\begingroup\$ Maybe you could shorten it: change sqrt[1-x^2] to (1-x^2)^.5) \$\endgroup\$ – Justin Feb 26 '14 at 3:33
  • \$\begingroup\$ and I can remove the * after the 2. Mathematica is wonderful. \$\endgroup\$ – Stack Tracer Feb 26 '14 at 3:36
4
\$\begingroup\$

Python (83 chars)

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
\$\endgroup\$
2
\$\begingroup\$

bc -l (22 = 5 command line + 17 program)

scale=500
4*a(1)
\$\endgroup\$
  • 5
    \$\begingroup\$ The rules say "nor may it call a library function to calculate pi." \$\endgroup\$ – Peter Taylor Feb 4 '11 at 20:09
  • \$\begingroup\$ @Peter The problem I guess, is that "library function" is not always a well defined term, and it only get worse when you say "to calculate Pi", as you may use it to calculate intermediate results, for example Sqrt() in Alexandru's answer. \$\endgroup\$ – Dr. belisarius Feb 4 '11 at 21:52
  • \$\begingroup\$ I think this is cheating because atan calculates 1/4 pi but it is an interesting solution nonetheless. \$\endgroup\$ – Thomas O Feb 5 '11 at 10:55
  • 1
    \$\begingroup\$ @Thomas O: if this is cheating, where's the limit? \$\endgroup\$ – J B Mar 17 '11 at 6:53
2
\$\begingroup\$

Mathematica (17 bytes)

N[ArcCos[-1],500]

Proof of validity.

\$\endgroup\$
2
\$\begingroup\$

PARI/GP, 14

\p500
acos(-1)

You can avoid trig by replacing the second line with

gamma(.5)^2

or

(6*zeta(2))^.5

or

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

or

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

or

sumalt(k=2,(-1)^k/(2*k-3))*4
\$\endgroup\$
1
\$\begingroup\$

Python3 136

Uses Madhava's formula.

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

Uses this formula.

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])
\$\endgroup\$
1
\$\begingroup\$

Mathematica - 50

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

Pyth, 21

u+/*GHhyHy^T500r^3T1Z

Uses this algorithm: pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...)))) found in the comments of the Golfscript answer. Note that Pyth is invalid for the question because it was created after the question was asked.

\$\endgroup\$
  • \$\begingroup\$ This doesn't deserve a downvote... \$\endgroup\$ – Beta Decay Oct 26 '14 at 11:21
  • \$\begingroup\$ This answer is incorrect, it generates 34247779... which, to my knowledge, is not pi. \$\endgroup\$ – orlp Mar 26 '15 at 19:11
  • \$\begingroup\$ @orlp The r operation was recently changed in a way which broke this answer. Change the 1 to a 0, and it will work in current Pyth. \$\endgroup\$ – isaacg Mar 27 '15 at 3:13
0
\$\begingroup\$

Axiom, 80 bytes

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

for reference https://tuts4you.com/download.php?view.452; it would be an approssimation to 6*arctg(1/sqrt(3))=%pi and it would use serie expansion for 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
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.