24 lines
866 B
Haskell
24 lines
866 B
Haskell
-- 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
|