aoc-2021/day7/first.hs

24 lines
542 B
Haskell

import Data.List
wordsWhen :: (a -> Bool) -> [a] -> [[a]]
wordsWhen pred s =
case dropWhile pred s of
[] -> []
s' -> w : wordsWhen pred s''
where (w, s'') = break pred s'
findBestPos :: [Integer] -> Integer
findBestPos = median
median xs
| len `mod` 2 == 0
= div (xs !! (mid-1) + xs !! mid) 2
| otherwise = xs !! mid
where len = length xs
mid = div len 2
solution xs = foldr1 (+) $ map (\x -> abs (x - med)) xs
where med = findBestPos xs
main = interact $ show . solution . map read . wordsWhen (==',')