--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2008/10/13

Project Euler: Problem 14

Problem 14

タプルの一方を比較し、戻り値はタプル全体としたいという処理を綺麗に書けなかった。なので Ord クラスのインスタンスとなる型を作った。

他は素朴な実装。1 から 99999 まで問題の処理を行い、それぞれ 1 になるまでカウントする。最後にカウントが最大のものを答えとして出力する。

実行結果

$ time ./14
Result 77031 351

real 0m17.152s
user 0m16.790s
sys 0m0.110s

プログラム

 1 data Result = Result Int Int deriving (Show, Eq)
 2
 3 instance Ord Result where
 4   (Result _ x) <= (Result _ y) = x <= y
 5
 6 next n | even n    = n `div` 2
 7        | otherwise = 3 * n + 1
 8
 9 clatzResult n = count 1 n
10   where count c x | x == 1    = Result n c
11                   | otherwise = count (c+1) (next x)
12
13 = maximum $ map clatzResult [1..99999]
14
15 main = print $ f
スポンサーサイト

comment

post




上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。