Commit 8b61c4c1 by Stuart Kurtz

Day 7.1

parent 98f86ab0
Showing with 9 additions and 21 deletions
module Main where
import Data.Foldable ( minimumBy )
import Data.Ord ( comparing )
readInts :: String -> [Int]
readInts = read . ("["++) . (++"]")
cost :: Int -> [Int] -> Int
cost d = sum . map (abs . (d-))
minVal :: (Ord b) => (a -> b) -> [a] -> b
minVal f = snd . minimumBy (comparing snd) . map (\a -> (a,f a))
minimumOf :: (Ord b) => (a -> b) -> [a] -> b
minimumOf f = minimum . map f
main :: IO ()
main = do
input <- readInts <$> readFile "data/crabs.txt"
print $ minVal (`cost` input) [minimum input..maximum input]
\ No newline at end of file
input <- read . ("["++) . (++"]") <$> readFile "data/crabs.txt"
print $ minimumOf (`cost` input) [minimum input..maximum input]
\ No newline at end of file
module Main where
import Data.Foldable ( minimumBy )
import Data.Ord ( comparing )
readInts :: String -> [Int]
readInts = read . ("["++) . (++"]")
cost :: Int -> [Int] -> Int
cost d = sum . map (f . (abs . (d-))) where
f n = n * (n+1) `div` 2
minVal :: (Ord b) => (a -> b) -> [a] -> b
minVal f = snd . minimumBy (comparing snd) . map (\a -> (a,f a))
minimumOf :: (Ord b) => (a -> b) -> [a] -> b
minimumOf f = minimum . map f
main :: IO ()
main = do
input <- readInts <$> readFile "data/crabs.txt"
print $ minVal (`cost` input) [minimum input..maximum input]
input <- read . ("["++) . (++"]") <$> readFile "data/crabs.txt"
print $ minimumOf (`cost` input) [minimum input..maximum input]
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment