30 lines
939 B
Haskell
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)
|