24 lines
542 B
Haskell
24 lines
542 B
Haskell
import Data.List
|
|
|
|
wordsWhen :: (a -> Bool) -> [a] -> [[a]]
|
|
wordsWhen pred s =
|
|
case dropWhile pred s of
|
|
[] -> []
|
|
s' -> w : wordsWhen pred s''
|
|
where (w, s'') = break pred s'
|
|
|
|
findBestPos :: [Integer] -> Integer
|
|
findBestPos = median
|
|
|
|
median xs
|
|
| len `mod` 2 == 0
|
|
= div (xs !! (mid-1) + xs !! mid) 2
|
|
| otherwise = xs !! mid
|
|
where len = length xs
|
|
mid = div len 2
|
|
|
|
solution xs = foldr1 (+) $ map (\x -> abs (x - med)) xs
|
|
where med = findBestPos xs
|
|
|
|
main = interact $ show . solution . map read . wordsWhen (==',')
|