Project Euler: Problem45

なかなか時間がかかっている…。

triangle = [n*(n+1) `div` 2| n <- [1..]]
pentagonal = [n*(3*n-1) `div` 2| n <- [1..]]
hexagonal = [n*(2*n-1)| n <- [1..]]
loop :: [Int] -> [Int] -> [Int] -> [Int]
loop (x:xs) (y:ys) (z:zs)
     | x == y && y == z = loop xs ys zs
     | x == minimum [x,y,z] = loop xs (y:ys) (z:zs)
     | y == minimum [x,y,z] = loop (x:xs) ys (z:zs)
     | z == minimum [x,y,z] = loop (x:xs) (y:ys) zs
main = print $ loop triangle pentagonal hexagonal

あれ?"Non-exhaustive patterns in function loop"って言われた。なんでだろ。