pを辺の長さが整数{a,b,c}の直角三角形の周囲の長さとしたとき、p = 120には ちょうど3つの解が存在し、{20,48,52},{24,45,51},{30,40,50}である。
p<1000でもっとも解の数が多くなるものを求めよ。
周囲の長さとそのときの三辺の長さの組み合わせのtupleを対象として最大値を 求める。三辺の組み合わせはリストの内包表記を用いて全て求める。
euler039 = fst $ maximumBy cmpSnd [(n, length $ sols n) | n <- [3..999]]
where sols n = [(i, j, n - i - j)
|i <- [1..n - 2], j <- [i..(n - i) `div` 2],
i ^ 2 + j ^ 2 == (n - i - j) ^ 2]
