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)