advent-2021/7/solution.hs

27 lines
554 B
Haskell

import Data.List.Split
main :: IO ()
main = do
input <- readFile "7/input.txt"
let x = parse input
-- Problem 1
print $ f x
-- Problem 2
print $ g x
where
f = solve distance
g = solve (\a -> tri . distance a)
parse :: String -> [Int]
parse = map read . wordsBy (== ',')
solve :: (Int -> Int -> Int) -> [Int] -> Int
solve f x = minimum $ map g [minimum x .. maximum x]
where g t = sum $ map (f t) x
tri :: Int -> Int
tri x = x * (x + 1) `div` 2
distance :: Int -> Int -> Int
distance n a = abs (n - a)