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

蟻本第2版23ページの問題 (POJ 1852) をHaskellで書く

蟻本第2版21ページの問題をHaskellで書く - 🍥shuma_yoshiokaに引き続き、プログラミング学び直し日記。「プログラミングコンテストチャレンジブック 第2版」の23ページより、「Ants」の問題。類似問題はこちら。

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

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

fMin :: [Int] -> Int -> Int
fMin (x:xs) l = maximum [ minimum [x, l-x], (fMin xs l) ]
fMin [] _ = minBound

fMax :: [Int] -> Int -> Int
fMax (x:xs) l = maximum [(l-x), (fMax xs l)]
fMax [] _ = minBound

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

    let r = ( fMin xs l , fMax xs l )

    putStrLn $ "min = " ++ show (fst r) ++ "\nmax = " ++ show (snd r)

この回答自体はとてもアッサリで、問題文から導き出す過程が大変。解説文ナシで解く技量はまだ無い。