Compare commits
3 Commits
e6e3cfbccc
...
d4cf6b25c8
Author | SHA1 | Date |
---|---|---|
Bill Ewanick | d4cf6b25c8 | |
Bill Ewanick | bc28995115 | |
Bill Ewanick | 7594cb1422 |
|
@ -16,33 +16,24 @@ NOTE: Once the chain starts the terms are allowed to go above one million.
|
||||||
-}
|
-}
|
||||||
module Main where
|
module Main where
|
||||||
|
|
||||||
-- import Data.Set (Set)
|
import Data.List (sortOn)
|
||||||
-- import qualified Data.Set as Set
|
import Data.Ord (Down (Down))
|
||||||
|
|
||||||
import Data.IntSet (IntSet)
|
|
||||||
import qualified Data.IntSet as IntSet
|
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = print ans
|
main = print ans
|
||||||
|
|
||||||
ans :: Integer
|
ans :: Int
|
||||||
ans = 42
|
ans = fst $ head $ sortOn (Down . snd) $ map collatzChainStartingAt [1..limit]
|
||||||
|
|
||||||
|
nextCollatz :: Int -> Int
|
||||||
nextCollatz n
|
nextCollatz n
|
||||||
| n == 1 = 0
|
| n == 1 = 0
|
||||||
| even n = n `div` 2
|
| even n = n `div` 2
|
||||||
| odd n = 3*n + 1
|
| odd n = 3*n + 1
|
||||||
|
|
||||||
collatzChainStartingAt n = takeWhile (/= 0) $ iterate nextCollatz n
|
collatzChainStartingAt :: Int -> (Int, Int)
|
||||||
|
collatzChainStartingAt n = (n, s')
|
||||||
|
where s' = length $ takeWhile (/= 0) $ iterate nextCollatz n
|
||||||
|
|
||||||
-- solve limit = (n, chain)
|
limit :: Int
|
||||||
-- where
|
|
||||||
-- s = maximum
|
|
||||||
-- $ map length
|
|
||||||
-- $ map collatzChainStartingAt [1..limit]
|
|
||||||
limit = 1_000_000
|
limit = 1_000_000
|
||||||
|
|
||||||
wholePositiveNumbers :: IntSet
|
|
||||||
wholePositiveNumbers = IntSet.fromDistinctAscList [1..limit]
|
|
||||||
|
|
||||||
f = IntSet.foldl (\acc key -> collatzChainStartingAt key : acc) []
|
|
||||||
|
|
Loading…
Reference in New Issue