コラッツの問題
rubyの練習
コンピューターを使うときには、如何にプログラムを短く美しく書くかが重要である。試しに、今年のセンターの数学の問題のコンピューターのところにでていたコラッツの問題の1になるまでの回数を求める関数を書いてみた。
def col(n) (n<2)?0:col((n%2==0)?n/2:3*n+1)+1 end
再帰を使う以外は、全くもって工夫が無いものになってしまった。速度を考えると
def col(n) (n<2)?0:col((n[0]==0)?n>>1:3*n+1)+1 end
の方が速くなると思ったが、遅くなってしまった。なぜだろう。2byteも増えたし。なかなか満足のいくコードは書けないものだ。