1
0
Fork 0

Finish 14

main
Bill Ewanick 2023-09-27 16:39:46 -04:00
parent e6e3cfbccc
commit 7594cb1422
1 changed files with 6 additions and 16 deletions

View File

@ -16,33 +16,23 @@ NOTE: Once the chain starts the terms are allowed to go above one million.
-}
module Main where
-- import Data.Set (Set)
-- import qualified Data.Set as Set
import Data.IntSet (IntSet)
import qualified Data.IntSet as IntSet
import Data.List (sortOn)
import Data.Ord (Down (Down))
main :: IO ()
main = print ans
ans :: Integer
ans = 42
ans = head $ head $ sortOn (Down . length) $ map collatzChainStartingAt [1..limit]
nextCollatz :: Integer -> Integer
nextCollatz n
| n == 1 = 0
| even n = n `div` 2
| odd n = 3*n + 1
collatzChainStartingAt :: Integer -> [Integer]
collatzChainStartingAt n = takeWhile (/= 0) $ iterate nextCollatz n
-- solve limit = (n, chain)
-- where
-- s = maximum
-- $ map length
-- $ map collatzChainStartingAt [1..limit]
limit :: Integer
limit = 1_000_000
wholePositiveNumbers :: IntSet
wholePositiveNumbers = IntSet.fromDistinctAscList [1..limit]
f = IntSet.foldl (\acc key -> collatzChainStartingAt key : acc) []