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)