2017-12-02 17:41:43 +00:00
|
|
|
circularSum :: [Int] -> Int
|
2017-12-12 06:43:01 +00:00
|
|
|
circularSum ns = snd $ foldr (\n (prev, sum) -> (n, n * fromEnum (n == prev) + sum)) (last ns, 0) ns
|
2017-12-02 17:41:43 +00:00
|
|
|
|
|
|
|
halfwaySum :: [Int] -> Int
|
|
|
|
halfwaySum ns =
|
|
|
|
let ms = drop (length ns `div` 2) ns ++ take (length ns `div` 2) ns
|
2017-12-12 06:43:01 +00:00
|
|
|
in foldr (\(n, m) sum -> n * fromEnum (n == m) + sum) 0 $ zip ns ms
|
2017-12-02 17:41:43 +00:00
|
|
|
|
|
|
|
main :: IO ()
|
|
|
|
main = do
|
2017-12-12 06:43:01 +00:00
|
|
|
nums <- fmap (map (read . pure)) $ readFile "1.txt"
|
2017-12-02 17:41:43 +00:00
|
|
|
print $ circularSum nums
|
|
|
|
print $ halfwaySum nums
|