真面目なブログはこっち 👉 blog.s64.jp

蟻本第2版21ページの問題をHaskellで書く

FPについて学び直しメモ - 🍥shuma_yoshiokaに引き続き、プログラミング学び直し日記。「蟻本」こと「プログラミングコンテストチャレンジブック 第2版」を読みながら、問題をHaskellで解いてゆく試み。

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

21ページより「三角形」の問題。類似問題はこちら。

f1 (x:xs) = maximum [(f2 x xs), (f1 xs)]
f1 [] = 0

f2 x (y:ys) = maximum [(f3 x y ys), (f2 x ys)]
f2 _ [] = 0

f3 x y (z:zs) = maximum [(f4 (maximum [x, y, z]) (x + y + z)), (f3 x y zs)]
f3 _ _ [] = 0

f4 max len = if (len - max) > max then len else 0

main :: IO ()
main = do
    _ <- (readLn :: IO Int) -- n
    as <- (map read . words) <$> getLine :: IO [Int]
    print $ f1 as

ほぼ初めてということもあり、ループを使わず再帰脳づくりするのにかなり時間掛かった