20 lines
555 B
Haskell
20 lines
555 B
Haskell
#!/usr/bin/env stack
|
|
-- stack --resolver lts-9.14 script
|
|
|
|
range :: (Ord a, Num a) => [a] -> a
|
|
range l = maximum l - minimum l
|
|
|
|
divisors :: (Integral a) => [a] -> a
|
|
divisors [] = 0
|
|
divisors (x:xs) =
|
|
case filter (\y -> (x `mod` y == 0) || (y `mod` x == 0)) xs of
|
|
[] -> divisors xs
|
|
y:_ -> if y > x then y `div` x
|
|
else x `div` y
|
|
|
|
main :: IO ()
|
|
main = do
|
|
contents <- getContents
|
|
let numbers = map (map read . words) $ lines contents :: [[Int]]
|
|
putStrLn . show $ sum $ map range numbers
|
|
putStrLn . show $ sum $ map divisors numbers
|