Problem 14
http://projecteuler.net/index.php?section=problems&id=14
--Haskell (needs -fbang-patterns -package containers), 20090101 import Data.Map (findMax, fromList) collatz :: Integer -> Integer collatz !n | n==1 = 1 | even n = 1 + collatz (n`div`2) | otherwise = 2 + collatz ((n*3+1)`div`2) main = print $ snd $ findMax $ fromList [(collatz (toInteger x), x) | x<-[1..999999]]
bang patternsを使わなければ,空間効率が悪すぎて終わらない.枝を刈ればもう少し速くなるだろう.