From 9c24c2f0d251cf8bb432929994c3ff47e79dd31a Mon Sep 17 00:00:00 2001 From: jdmcdona Date: Fri, 4 Sep 2015 14:13:45 -0500 Subject: [PATCH] Add solution for problem 61. --- Problem061.hs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Problem061.hs diff --git a/Problem061.hs b/Problem061.hs new file mode 100644 index 0000000..e480bcf --- /dev/null +++ b/Problem061.hs @@ -0,0 +1,19 @@ +-- Find the sum of the only ordered set of six cyclic 4-digit numbers for which +-- each polygonal type: triangle, square, pentagonal, hexagonal, heptagonal, and +-- octagonal, is represented by a different number in the set. + +import Euler + +polygonal p n = n * ((p - 2) * n - (p - 4)) `div` 2 +findPolygonal (l,h) ps = [ (x, ps \\ [p]) | p <- ps, x <- takeWhile (<= h) $ dropWhile (< l) $ map (polygonal p) [1..] ] + +main = print $ head $ do + let findNext x ps = findPolygonal (max 1000 $ 100 * (x `mod` 100), 100 * (x `mod` 100) + 99) ps + (a, ps') <- findPolygonal (1000, 9999) [8,7..3] + (b, ps') <- findNext a ps' + (c, ps') <- findNext b ps' + (d, ps') <- findNext c ps' + (e, ps') <- findNext d ps' + (f, ps') <- findNext e ps' + guard $ a >= 100 * (f `mod` 100) && a <= 100 * (f `mod` 100) + 99 + return $ (id &&& sum) [a,b,c,d,e,f]