euler/haskell/e039.hs

25 lines
635 B
Haskell
Raw Normal View History

2011-10-18 03:10:53 +00:00
{-
If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exactly three solutions for p = 120.
{20,48,52}, {24,45,51}, {30,40,50}
For which value of p 1000, is the number of solutions maximised?
-}
import Data.List
import Data.Ord
import Text.Printf
import Util.Triangle
trimap = do
let totals = map (\x -> (x, (length . triangles) x)) [1..999]
last (sortBy (comparing snd) totals)
triangles sum = do
let cs = reverse (takeWhile (<= sum - 3) [3..])
concat (map (\x -> right_triangles sum x) cs)
main = do
printf "Maximum triangles found with sum = %d\n" (fst trimap)