27 lines
554 B
Haskell
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)
|