2017-12-12 06:43:01 +00:00
|
|
|
{-# LANGUAGE TupleSections #-}
|
|
|
|
|
|
|
|
import Data.List (find)
|
|
|
|
import Data.Maybe (catMaybes)
|
2017-12-02 18:43:59 +00:00
|
|
|
|
|
|
|
checksum :: [[Int]] -> Int
|
|
|
|
checksum = sum . map (\line -> maximum line - minimum line)
|
|
|
|
|
|
|
|
divsum :: [[Int]] -> Int
|
2017-12-12 06:43:01 +00:00
|
|
|
divsum = sum . map divline
|
2017-12-02 18:43:59 +00:00
|
|
|
|
|
|
|
divline :: [Int] -> Int
|
|
|
|
divline ns =
|
2017-12-12 06:43:01 +00:00
|
|
|
uncurry div . head . catMaybes . map (\x -> Just (x,) <*> find (greaterAndDivisible x) ns) $ ns
|
|
|
|
where greaterAndDivisible n m = n > m && n `mod` m == 0
|
2017-12-02 18:43:59 +00:00
|
|
|
|
|
|
|
main :: IO ()
|
|
|
|
main = do
|
|
|
|
input <- readFile "2.txt"
|
|
|
|
let grid = map (map read . words) $ lines input :: [[Int]]
|
|
|
|
print $ checksum grid
|
|
|
|
print $ divsum grid
|