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 (==',')