advent-of-code/2017/02/day2.hs
2024-11-12 21:46:18 +01:00

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