Life Goes On

まあまあだけど楽しんでる方です

18問目再び

Project Euler - IMHO経由でEuler problems - HaskellWikiを知り、つらつら眺めてたのですが、以前に解いた18問目のもっとシンプルなコードが載ってました。
scanではなくfold、l(eft)ではなくr(ight)を使うのがポイントです。
ちょっと悔しい。

main = do
    cs <- readFile "triangle.txt"
    print $ euler018 $ map ((map read) . words) $ lines cs

euler018 :: [[Int]] -> Int
euler018 triangle = head $ foldr1 sumMaximum triangle

sumMaximum :: [Int] -> [Int] -> [Int]
sumMaximum this post = zipWith (+) this $ zipWith max post (tail post)