20
\$\begingroup\$

Write the shortest code, in number of bytes, to display, return, or evaluate to the golden ratio (that is, the positive root of the quadratic equation: \$x^2-x-1=0\$, approximately 1.618033988749895), to at least 15 significant figures. No input will be given to your program.

Sample in Stutsk programming language:

1 100 { 1 + 1 swp / } repeat print 
\$\endgroup\$
2
  • 7
    \$\begingroup\$ This question will need a scoring criteria, input/output specification, etc. Please read the FAQ - codegolf.stackexchange.com/faq \$\endgroup\$ Commented Jul 26, 2012 at 20:27
  • \$\begingroup\$ @ardnew: I'll try to at least nail down an input (namely none) and winning criterion (shortest code). The expected output is, well...most languages support double-precision, so let's do that and call it good. :-) \$\endgroup\$ Commented Jul 30, 2012 at 17:22

46 Answers 46

19
\$\begingroup\$

Perl, Python - 10 chars

probably other languages too

.5+5**.5/2 
\$\endgroup\$
2
  • 1
    \$\begingroup\$ That's also a nice entry for the polyglot challenge :) (codegolf.stackexchange.com/q/6764/3527) \$\endgroup\$ Commented Jul 27, 2012 at 6:47
  • 6
    \$\begingroup\$ .5+5^.5/2 will work in Octave/MATLAB, probably some others too \$\endgroup\$ Commented Jul 27, 2012 at 9:31
10
\$\begingroup\$

Julia 0.7, 2 bytes

φ 

Try it online!

I'm surprised nobody has posted this yet...

\$\endgroup\$
4
  • \$\begingroup\$ That’s an old version of Julia! Does it not work in 1.5? \$\endgroup\$ Commented Aug 27, 2020 at 6:21
  • 2
    \$\begingroup\$ Julia 1.0+ moved a lot of stuff out of Base, often making the code much more verbose... \$\endgroup\$ Commented Aug 27, 2020 at 8:58
  • \$\begingroup\$ Why it's 2 bytes? I just see one character, does the tab include in length of program? \$\endgroup\$ Commented Nov 19, 2020 at 9:22
  • 2
    \$\begingroup\$ @AmirrezaRiahi Unlike golfing languages, Julia doesn't use a custom codepage, so this is scored in UTF-8, where greek letters use 2 bytes. \$\endgroup\$ Commented Nov 19, 2020 at 17:17
9
\$\begingroup\$

Desmos, 8 bytes

aa-a~1 a 

Try it on Desmos!

\$\endgroup\$
1
  • 1
    \$\begingroup\$ Wait yo using regressions to get constants is actually so smart, you should post that as a tip on the Desmos code golfing tips page. I've always done it like this, which is 11 bytes. \$\endgroup\$ Commented Jul 18, 2022 at 2:34
8
\$\begingroup\$

Mathematica 11

GoldenRatio 

This is the irrational number itself, not an approximation of it.

Examples (first 2 examples from Mathematica documentation)

FullSimplify[GoldenRatio^4 - GoldenRatio] FullSimplify[GoldenRatio^20 + 1/GoldenRatio^20] FullSimplify[GoldenRatio^2 - GoldenRatio - 1] 

3 + Sqrt[5]

15127

0

\$\endgroup\$
7
\$\begingroup\$

PHP 17 chars

This one is just trolling, but hey.

1.618033988749895 
\$\endgroup\$
0
7
\$\begingroup\$

APL, 7

2÷⍨1+√5 ÷2÷1+√5 .5×1+√5 .5+√5÷4 

Curses! I can't find a way to do it in less than 7 characters! Dialect is Nars2000.

\$\endgroup\$
1
  • 4
    \$\begingroup\$ Dyalog APL: 1+∘÷⍣=1 \$\endgroup\$ Commented Jul 4, 2020 at 18:20
6
\$\begingroup\$

k (10 chars)

As continued fraction:

{%x%x+1}/1 

Or in closed form for 11:

%2%1+sqrt 5 
\$\endgroup\$
6
\$\begingroup\$

J, 7 chars

-:1+%:5 

some more text for the filter (my first J solution, heh)

\$\endgroup\$
2
  • \$\begingroup\$ When I run -:1+%:5, the result is 1.61803. Is something more needed in the program (or system settings) to get the required "at least 15 significant figures"? \$\endgroup\$ Commented Jul 31, 2012 at 2:23
  • \$\begingroup\$ @r.e.s the question asks " to display, return, or evaluate". It is evaluated to the correct precision, just not displayed. It's a compliant answer. \$\endgroup\$ Commented Jul 31, 2012 at 10:10
5
\$\begingroup\$

brainf, 93 bytes

+++++++[>+++++++<-]>.---.++++++++.-----.+++++++.--------.+++..++++++.-..-.---.+++++.-.+.----. 

Try it online!

It works :/ Not very optimised though. I can’t think of any way to optimize this, although I’m sure a way exists.

Explanation:

+++++++ Add seven to cell at 0. [ Begin a loop. >+++++++ Add seven to cell at 1. < Go back to cell 0. - Decrement the counter there (soon it will reach 0). ] End loop when cell 0 reaches 0 after 7 repetitions. > Go to cell 1 which is now 49. . Print it (1). ---. Decrement 3 to get 46 (period) then print it. Afterwards, not much explanation is needed. Just add some or subtract some and repeat until everything is printed. ++++++++.-----.+++++++.--------.+++..++++++.-..-.---.+++++.-.+.----. 
\$\endgroup\$
4
\$\begingroup\$

JavaScript (ECMAScript), 10 chars

5**.5/2+.5 

This is the same as the Perl & Python submission - thanks to Redwolf Programs for telling me about this.

However, back in 2012, when this answer was originally written, the ** operator did not exist in JavaScript. While almost all browsers and do now support the exponentiation operator, according to Can I Use, as of July 2020, around 9% of users still does not support it, including the latest version of Internet Explorer. Thus, the old version of the answer:

JavaScript (backwards-compatible), 17 chars

Math.sqrt(5)/2+.5 
\$\endgroup\$
1
  • 1
    \$\begingroup\$ There's now a ** operator, so 5**.5/2+.5 would work too. Note that this is the same as the python submission. \$\endgroup\$ Commented Jul 3, 2020 at 19:33
4
\$\begingroup\$

05AB1E, 6 bytes

5X‚t;O 

Try it online!

Explanation

5 Push 5 X Push 1 ‚ Pair: [5, 1] t Square root: [2.23606797749979, 1.0] ; Halve: [1.118033988749895, 0.5] O Sum: 1.618033988749895 
\$\endgroup\$
3
\$\begingroup\$

Language Agnostic, 15 chars

9227465/5702887 

If all you need is enough precision for an IEEE 32 bit float, you can do it in 9 chars:

6765/4181 

This will only work for languages that don't treat integer division specially.

\$\endgroup\$
2
  • \$\begingroup\$ 9227465/5702887 produces only 13 correct digits - it differs on 14. digit. \$\endgroup\$ Commented Feb 2, 2014 at 3:24
  • 1
    \$\begingroup\$ 14930352/9227465 is probably the shortest, you can find it using optimal algorithm as advised on math.SE \$\endgroup\$ Commented Feb 2, 2014 at 3:37
3
\$\begingroup\$

dc, 8 chars

Fk5v1+2/ 

The value is on top of the stack - can be printed by adding p to the end of the program. F pushes 15 on the stack (trick found here), k sets the precision to 15 digits. The rest is normal postfix notation :-) v is a square root. Trailing p for print was omitted.

\$\endgroup\$
2
  • 1
    \$\begingroup\$ It can be argued that the p is not needed, because the requirement is to evaluate (not necessarily display) to 15 places. \$\endgroup\$ Commented Feb 2, 2014 at 2:02
  • \$\begingroup\$ @r.e.s. interesting bending of rules :) thanks, updated :) \$\endgroup\$ Commented Feb 2, 2014 at 2:53
3
\$\begingroup\$

J, 10 9 8 chars

p.1,1,_1 

(root of polynomial: -x^2+x+1)

>:@%^:_+1 

(continued fraction (9 chars))

%:@>:^:_+1 

(continued root: (10 chars))

\$\endgroup\$
3
\$\begingroup\$

Arn, 3 bytes

phi 

Just a builtin, too short to be compressed. Returns 1.61803398874989484820458683436563811.

A more interesting one. If running in the downloadable version, this will print n digits, given the command:

arn run file.arn -p n 

or 25 digits if the -p flag is not provided.

If running in the online version, this will print the first 50 digits.

6 bytes

l[├Qn0 

Try it!

Explanation

Unpacked: :-1+:/5

:- Halve 1 Literal one + Plus :/ Square root of 5 Literal five 
\$\endgroup\$
2
  • \$\begingroup\$ arn has no increment command? \$\endgroup\$ Commented Nov 19, 2020 at 9:19
  • 1
    \$\begingroup\$ The increment command is two bytes, ++. This increments variables too, which gives it a unique purpose. \$\endgroup\$ Commented Nov 19, 2020 at 16:55
3
\$\begingroup\$

Husk, 4 bytes

(floating-point; accurate to 15 significant figures)

½→√5 

Try it online!

This seems (to me) to be surprisingly readable for a golfing language...

 √5 # square root of 5 → # increment ½ # halve 

Husk, 9 bytes

(calculation as arbitrary precision rational number)

!Ẋ/İf!5İ⁰ 

Try it online! (TIO header converts the rational number [expressed in Husk as a fraction] to its first 1000 decimal digits)

 / # get the ratio of Ẋ # every pair of elements of İf # the fibonacci sequence; ! # now select the ratio at position !5İ⁰ # 10^5 (change to !9İ⁰ for more accuracy with same byte-count) 
\$\endgroup\$
3
\$\begingroup\$

K (ngn/k), 8 bytes

(1+1%)/1 

Try it online!

Adapted from the built-in docs.

  • (...)/1 set up a converge-reduce, seeded with 1 and run until two successive iterations return the same result
    • (1+1%) add one to the inverse of the current value, and feed that into the next iteration
\$\endgroup\$
2
\$\begingroup\$

Ruby - 14 chars

(­5**0.5)/2+0.5 

Based on the Javascript Perl answer above.

\$\endgroup\$
3
  • \$\begingroup\$ Better base it on the Perl answer instead, 5**0.5 is shorter than Math.sqrt(­5). \$\endgroup\$ Commented Sep 27, 2012 at 14:14
  • \$\begingroup\$ My mind was skipping on me, as I could not recall what the exponential equivalent to sqrt was.... \$\endgroup\$ Commented Sep 27, 2012 at 14:21
  • 2
    \$\begingroup\$ 8 years late... the parentheses are not needed. \$\endgroup\$ Commented Apr 23, 2020 at 0:30
2
\$\begingroup\$

Almost language agnostic, 9 chars

(tested in R):

.5+5^.5/2 

In R, evaluates full double precision. More digits can be seen by setting options(digits=99). The question says "evaluate", so that goes with the rules.

\$\endgroup\$
1
  • \$\begingroup\$ Excel, 10 chars just prepend an = sign before this. \$\endgroup\$ Commented Jul 13, 2022 at 11:47
2
\$\begingroup\$

x86 machine code, 13 bytes

Hexdump:

b1 7f d9 e8 d9 e8 de c1 d9 fa e2 f8 c3 

Disassembly:

100139D0 B1 7F mov cl,7Fh 100139D2 D9 E8 fld1 again: 100139D4 D9 E8 fld1 100139D6 DE C1 faddp st(1),st 100139D8 D9 FA fsqrt 100139DA E2 F8 loop again (100139D4h) 100139DC C3 ret 

Uses the converging sequence an = sqrt(an-1 + 1).

The number of iterations is determined by the contents of ecx, which is mostly garbage. The minimal number of iterations is 127, which guarantees good precision (actually, 30 iterations should be enough). In the worst case, the calculation will take a few minutes (232-1 iterations), and in the best case, it's instantaneous (127 iterations).

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

Python 3, 11 bytes

(1+5**.5)/2 

= 1.618033988749895

\$\endgroup\$
1
  • \$\begingroup\$ Welcome to the site! \$\endgroup\$ Commented Nov 19, 2020 at 12:32
2
+50
\$\begingroup\$

Whispers v3, 16 bytes

> φ >> Output 1 

Try it online!

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

><>, 29, 25 bytes

Saved 4 bytes!

After posting this answer I noticed the example Stutsk program and realized that I could probably save a few bytes. My new answer is based off the example given in the question. This program works because the golden ration can be expressed as a continued fraction.

golden_ratio = 1+1/(1+1/(1+1/...))

ff*101.;n~< $1$,1+$:?!^1- 

Try it online!

Old Answer

f201.;n,2+1~< $:5$,+2,$:?!^1- 

The second line approximates the sqrt of 5. After looping 15 times, this value is used to calculate the golden ratio.

Try it online!

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

Pyth, 3 bytes

.n3 

Try it online!

11 bytes without builtin:

+c@5 2 2 .5 

Try it online!

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

Rattle, 8 bytes

=5e.5+/p 

Try it Online!

Explanation

=5 set top of stack to 5 e.5 square root + increment / divide by 2 p print value 

This first approach is pretty boring, it's just a direct calculation. Here's a slightly more exciting 13-byte method which calculates many Fibonacci numbers then finds the ratio between them:

+s[+~$]99$/~p 

Try it Online!

Explanation

+s increment the top of the stack (to 1) and save to memory [ ]99 loop 99 times +~ increment top of stack by the value in memory $ swap the top of the stack for the value in memory $ swap the top of the stack for the value in memory /~ divide the top of the stack by the value in memory p print value 
\$\endgroup\$
2
\$\begingroup\$

Haskell (15 bytes)

g=(sqrt 5+1)/2 
\$\endgroup\$
2
\$\begingroup\$

TI-BASIC (TI-83 Plus), 7 bytes

.5(1+√(5 

pretty simple

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

Bespoke, 196 bytes

phi is from golden mean,a number I really do see commonly having a mystical proportion for its Fibonacci sequence:important numbers Leonardo Bonacci gave Fibonacci sequence beautiful name golden X 

Outputs 1.618033988749894; the digits are hardcoded.

Alternate version, 273 bytes

PUT XX:FOUR SEXTET PUSH I OUTPUT N OUTPUT CH PUT XXX:I BI FIFTH PUT XX:I NUMBERZERO PUT XX:FOUR BI STACKTOP POW STACKTOP PRODUCTOF PUSH I PUSH TRI STACKTOP MINUS STACKTOP POW PUT XX:I NUMBERZERO PUT XX:BI I STACKTOP POW PUSH FIFTH STACKTOP PRODUCTOF STACKTOP MINUS OUTPUT N 

Outputs 1.6180339887498948482045; prints the number 1, then ., then the result of \$\lfloor \sqrt{125 \times 10^{42}} \rfloor - 5 \times 10^{21}\$ (the closest integer approximation of \$(\phi - 1) \times 10^{22}\$).

\$\endgroup\$
1
\$\begingroup\$

dc - 11 chars

15k5v2/.5+p 

The most character-consuming task is setting the decimal precision..

\$\endgroup\$
0
1
\$\begingroup\$

Mathematica - 31

N[x/.Solve[x^2-x-1==0][[2]],16] 1.618033988749895 

(It's going to be the longest code, I expect...:)

\$\endgroup\$