collatz :: Int -> [Int] collatz 1 = [1] collatz n | mod n 2 == 0 = n : collatz (div n 2) | mod n 2 == 1 = n : collatz (3*n + 1) p14 :: Int p14 = p14' 999999 0 0 where p14' 0 maxnum _ = maxnum p14' n maxnum maxlen = let len = length (collatz n) in if len > maxlen then p14' (n-1) n len else p14' (n-1) maxnum maxlen main = putStrLn $ "Solution: " ++ show p14