diff --git a/2_alt.hs b/2_alt.hs new file mode 100644 index 0000000..22cfa7f --- /dev/null +++ b/2_alt.hs @@ -0,0 +1,28 @@ +import Data.List + +checksum :: [[Int]] -> Int +checksum = sum . map (\line -> maximum line - minimum line) + +divsum :: [[Int]] -> Int +divsum = sum . map divline + +divline :: [Int] -> Int +divline ns = + let (n, m) = catTupleMaybes $ map (\x -> (x, find (greaterAndDivisible x) ns)) ns + in n `div` m + where + greaterAndDivisible :: Int -> Int -> Bool + greaterAndDivisible n m = n > m && n `mod` m == 0 + +catTupleMaybes :: [(Int, Maybe Int)] -> (Int, Int) +catTupleMaybes [] = (0, 1) +catTupleMaybes ((t1, mt2):ts) = case mt2 of + Just t2 -> (t1, t2) + Nothing -> catTupleMaybes ts + +main :: IO () +main = do + input <- readFile "2.txt" + let grid = map (map read . words) $ lines input :: [[Int]] + print $ checksum grid + print $ divsum grid \ No newline at end of file