Add solution for problem 45.

This commit is contained in:
Jesse D. McDonald 2015-08-14 23:11:33 -05:00
parent 9bc586b327
commit 6cadd0eb1e
1 changed files with 23 additions and 0 deletions

23
Problem045.hs Normal file
View File

@ -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(3n1)/2 1, 5, 12, 22, 35, ...
-- Hexagonal H[n]=n(2n1) 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