Tackled problem 1625
[cses-programming-tasks.git] / app / cses1068.hs
1 import Data.List
2
3 collatz :: Int -> Int
4 collatz n | even n = n `div` 2
5 collatz n | otherwise = 3 * n + 1
6
7 collatzStep :: Int -> Maybe (Int, Int)
8 collatzStep 0 = Nothing
9 collatzStep 1 = Just (1, 0)
10 collatzStep n = Just (n, collatz n)
11
12 main :: IO ()
13 main = do
14 line <- getLine
15 let n = read line
16 let nums = unfoldr collatzStep n
17 let outStr = intercalate " " $ map show nums
18 putStrLn outStr