adventofcode/2021/day07.hs

30 lines
939 B
Haskell

module Day07 where
import Data.List (sort)
import Data.List.Split (splitOn)
import Numeric.Extra (intToDouble)
getLocalMinimum :: [Int] -> Int
getLocalMinimum [x] = x
getLocalMinimum (x:y:xs)
| x < y = x
| otherwise = getLocalMinimum (y:xs)
getFuel :: [Int] -> Int
getFuel input = getLocalMinimum $ map (\avg -> sum $ map (\x -> abs $ (\x -> sum [1..abs x]) $ x-avg ) input) [0..maximum input]
main :: IO ()
main = do
input <- sort . map (read :: String -> Int) . splitOn "," <$> getContents
let median = input !! (length input `div` 2)
-- print median
-- print $ sum input
let fuel = sum $ map (\x -> abs $ x-median) input
putStrLn $ "part 1: " ++ show fuel
let fuel = map (\avg -> sum $ map (\x -> abs $ (\x -> sum [1..abs x]) $ x-avg ) input) [0..maximum input]
-- print avg
-- print fuel
putStrLn $ "part 2: " ++ show (getLocalMinimum fuel)