3n+1まねして作ってみた
http://araistudy.g.hatena.ne.jp/czk-htn/20070612
作ってみた。
#!/usr/bin/ruby def calc_max_len (from, to) calculator = lambda do |a,n| return n if a == 1 if a%2 > 0 a = (3*a)+1 else a = a/2 end calculator.call(a,n+1) end (from..to).map {|e| calculator.call(e,1)}.max end from, to = ARGV.map {|e| e.to_i} puts(calc_max_len(from,to)) __END__ $ ./3n+1.rb 1 10 20 $ ./3n+1.rb 100 200 125 $ ./3n+1.rb 201 210 89 $ ./3n+1.rb 900 1000 174
コードの内容は人によってかわるみたい。
追記
ブロックを使う必要がない場合は、「max => sort.last」の方が良いかも。
(破壊的でも良い場合は「sort!.last」)*1
*1:いや、last => [-1]でも良いけど