Io で Collatz 予想
お題は「Collatz予想」についての問題です.
関数型言語でも,そうでない言語でも,ぜひ回答をお寄せください!
例によって、Io(iolanguage) で書くとこんな感じに。
collatz.io
result := 0 max_step := 0 collatz := Object clone do( step := 0 f := method(n, step = step + 1 if (n == 1, 1, if (n % 2 == 0, f(n / 2), f(3 * n + 1)) ) ) calc := method(n, step = 0 f(n) ) ) for(i, 1, 100, collatz calc(i) if (max_step < collatz step, max_step = collatz step result = i ) ) write("result = ", result, "\n") write("max_step = ", max_step, "\n")
実行結果
$ io collatz.txt
result = 97
max_step = 119
collatz オブジェクトは、calc で計算開始、呼び出し回数は step にカウントされていきますー