diff options
Diffstat (limited to 'haskell/039-interger_right_triangle.hs')
| -rw-r--r-- | haskell/039-interger_right_triangle.hs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/haskell/039-interger_right_triangle.hs b/haskell/039-interger_right_triangle.hs new file mode 100644 index 0000000..fda5eb9 --- /dev/null +++ b/haskell/039-interger_right_triangle.hs @@ -0,0 +1,24 @@ +-- Integer right triangles +-- +-- Problem 39 +-- 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(maximumBy) + +-- 4m20s stucks +main = do + print (maximumBy (\(_, xs) (_, ys) -> compare (length xs) (length ys)) [ + (p, + [(a, b, p - a - b) | a <- [1..p], b <- [1..(p-a)], + validRightTriangle a b (p - a - b)]) + | p <- [1..1000] + ]) + +validRightTriangle :: Int -> Int -> Int -> Bool +validRightTriangle a b c = a ^ 2 + b ^ 2 == c ^ 2 |
