ProjectEular

-- Problem 18

module Main (main) where

main :: IO ()
main = do
    triangle_str <- getContents
    print $ problem18 $ to_triangle triangle_str

to_triangle :: String -> [[Int]]
to_triangle = map (map read . words) . lines

problem18 :: [[Int]] -> Int
problem18 tri = max_sum tri 0 0

max_sum :: [[Int]] -> Int -> Int -> Int
max_sum tri i j
    | i+1 == length tri = tri !! i !! j
    | otherwise         = tri !! i !! j + max left right
    where
        left  = max_sum tri (i+1) j
        right = max_sum tri (i+1) (j+1)

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS