{- | Description: Collatz conjecture Copyright: Copyright (C) 2022 Yoo Chung License: GPL-3.0-or-later Maintainer: dev@chungyc.org Part of Ninety-Nine Haskell "Problems". Some solutions are in "Solutions.P78". -} module Problems.P78 (collatz) where import qualified Solutions.P78 as Solution {- | Starting from a positive integer \(n\), we can have a sequence of numbers such that at each step, the next number is \(3n+1\) if \(n\) is odd, or \(\frac{n}{2}\) if \(n\) is even. The Collatz conjecture states that this sequence will always end at 1 after a finite number of steps. Using the t'Control.Monad.Writer.Lazy.Writer' monad, count the number of these steps for a given positive integer \(n\). === Examples >>> collatz 1 0 >>> collatz 2 1 >>> collatz 31 106 === __Hint__ The outputs produced by v'Control.Monad.Writer.Lazy.tell' with the t'Control.Monad.Writer.Lazy.Writer' monad are combined with 'mappend'. In the 'Data.Monoid.Sum' monoid, 'mappend' is addition. -} collatz :: Integral a => a -> a collatz :: forall a. Integral a => a -> a collatz = a -> a forall a. Integral a => a -> a Solution.collatz