diff --git a/Problem045.hs b/Problem045.hs new file mode 100644 index 0000000..00640a2 --- /dev/null +++ b/Problem045.hs @@ -0,0 +1,23 @@ +-- Triangle, pentagonal, and hexagonal numbers are generated by the following formulae: +-- +-- Triangle T[n]=n(n+1)/2 1, 3, 6, 10, 15, ... +-- Pentagonal P[n]=n(3n−1)/2 1, 5, 12, 22, 35, ... +-- Hexagonal H[n]=n(2n−1) 1, 6, 15, 28, 45, ... +-- +-- It can be verified that T[285] = P[165] = H[143] = 40755. +-- +-- Find the next triangle number that is also pentagonal and hexagonal. + +import Euler + +triangles, pentagonals, hexagonals :: [Int] +triangles = map (\n -> n*(n+1) `div` 2) [1..] +pentagonals = map (\n -> n*(3*n-1) `div` 2) [1..] +hexagonals = map (\n -> n*(2*n-1)) [1..] + +main = print $ go triangles pentagonals $ dropWhile (<= 40755) hexagonals + where + go ts@(t:_) ps@(p:_) hs@(h:_) + | (t == p) && (t == h) = t + | h < t || h < p = go ts ps (tail hs) + | otherwise = go (dropWhile (< h) ts) (dropWhile (< h) ps) hs