RubyとSinatraではじめるWebアプリケーション開発の教科書:トレーニング3.7.4.2解答

www.morikita.co.jp

のトレーニング問題3.7.4.2を解いてみました。

(1..100).each do |x|
  print "#{x}"
  y = x
  until y == 1
    if y.even?
      y /= 2
    else
      y = y * 3 + 1
    end
    print "#{y}"
  end
  puts 'OK!' if y == 1
end
$ ruby collatz.rb
1 → OK!
2 → 1 → OK!
3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 → OK!
4 → 2 → 1 → OK!
5 → 16 → 8 → 4 → 2 → 1 → OK!
6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 → OK!
7 → 22 → 11 → 34 → 17 → 52 → 26 → 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 → OK!
8 → 4 → 2 → 1 → OK!
9 → 28 → 14 → 7 → 22 → 11 → 34 → 17 → 52 → 26 → 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 → OK!
10 → 5 → 16 → 8 → 4 → 2 → 1 → OK!
(以下略)