morris555's diary

高校生のブログです。

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