この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは。
今回は、Rubyを使ったフィボナッチ数列のCode Golfを 行ってみました。
Code Golfとは
より少ないバイト数で課題をプログラミングする事を言います。
要するにいかに少ない文字数でプログラムを書けるか競う遊びです。
http://golf.shinh.org/p.rb?Fibonacci+Numbersの問題をやってみました。
・問題
f(1)->1
f(2)->1
f(x)->f(x-1)+f(x-2)
print f(1) to f(46)
以下にプログラムを短くしていった過程を示します。
まず、普通にフィボナッチ数列の定義通りにやってみる。
f=[];p f[1]=1;p f[2]=2;(3..45).each{|x| p f[x]=f[x-1]+f[x-2]}
できるだけ短いソースで書いてみる。
p 1;p a=b=1;22.times{p a+=b;p b+=a}
ここからはどうにか短くできるように頑張る。
a=b=1;23.times{p a;a+=b;p b;b+=a}
a=0;b=1;46.times{p a+=b;b=a-b}
a=0;b=1;46.times{p -a+=b=a-b}
p a=b=1;45.times{p b+=a=b-a}
最後のソースを軽く説明すると、フィボナッチ数列は1つ前の数と2つ前の数を足していくものですがこのソースでは、
(1つ前の数字+1つ前の数字ー2つ前の数字)
を表示させていっている感じです。
今回は最終的に28文字までしかできませんでした。24文字が一番短いらしいのですが、4文字とどきませんでした。今後、頑張りたいと思います。
この様なプログラムを書くのは、とてもおもしろいので皆さんも是非チャレンジしてみて下さい。