advent-of-code/2017/01/day1.hs
2024-11-12 21:46:18 +01:00

18 lines
525 B
Haskell

#!/usr/bin/env stack
-- stack --resolver lts-9.14 script
sumMatchingOffset :: Int -> [Int] -> Int
sumMatchingOffset k xs =
foldr (\x acc -> if fst x == snd x then acc + fst x else acc) 0 xs'
where n = length xs
xs' = zip xs (take n . drop k . cycle $ xs)
toDigits :: String -> [Int]
toDigits = map (read . (:""))
main :: IO ()
main = do
digitsStr <- getLine
let digits = toDigits digitsStr
putStrLn . show $ sumMatchingOffset 1 digits
putStrLn . show $ sumMatchingOffset (length digits `div` 2) digits