Euler question 14 - start
parent
970c584d0a
commit
e6e3cfbccc
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
|
"Collatz",
|
||||||
"concat",
|
"concat",
|
||||||
"coprime",
|
"coprime",
|
||||||
"elems",
|
"elems",
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
{-
|
||||||
|
The following iterative sequence is defined for the set of positive integers:
|
||||||
|
n -> n/2 (n is even)
|
||||||
|
n -> 3n+1 (n is odd )
|
||||||
|
|
||||||
|
Using the rule above and starting with 13, we generate the following sequence:
|
||||||
|
|
||||||
|
13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
|
||||||
|
|
||||||
|
It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms.
|
||||||
|
Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.
|
||||||
|
|
||||||
|
Which starting number, under one million, produces the longest chain?
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = print ans
|
||||||
|
|
||||||
|
ans :: Integer
|
||||||
|
ans = 42
|
||||||
|
|
||||||
|
nextCollatz n
|
||||||
|
| n == 1 = 0
|
||||||
|
| even n = n `div` 2
|
||||||
|
| odd n = 3*n + 1
|
||||||
|
|
||||||
|
collatzChainStartingAt n = takeWhile (/= 0) $ iterate nextCollatz n
|
||||||
|
|
||||||
|
-- solve limit = (n, chain)
|
||||||
|
-- where
|
||||||
|
-- s = maximum
|
||||||
|
-- $ map length
|
||||||
|
-- $ map collatzChainStartingAt [1..limit]
|
||||||
|
limit = 1_000_000
|
||||||
|
|
||||||
|
wholePositiveNumbers :: IntSet
|
||||||
|
wholePositiveNumbers = IntSet.fromDistinctAscList [1..limit]
|
||||||
|
|
||||||
|
f = IntSet.foldl (\acc key -> collatzChainStartingAt key : acc) []
|
Loading…
Reference in New Issue