Problem 18
Problem 18です。
import Control.Applicative group _ [] = [] group n xs = let (xs1, xs2) = splitAt n xs in xs1 : group (n+1) xs2 main = do input <- map read <$> (words <$> getContents) :: IO [Int] print . head . foldr1 max' $ group 1 input where max' num1 num2 = zipWith (+) num1 . zipWith max num2 . tail $ num2
# p18.hs < text.txt
こんな感じです。
これでPloblem 67もできると思います。
追記
text.txtは、こんな感じです。
75 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 44 65 25 43 91 52 97 51 14 70 11 33 28 77 73 17 78 39 68 17 57 91 71 52 38 17 14 91 43 58 50 27 29 48 63 66 04 68 89 53 67 30 73 16 69 87 40 31 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23