From f374478dd2aa8b33c86346141a8bbfe242fb02d5 Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Sat, 2 Dec 2017 11:11:28 -0800 Subject: [PATCH] Added alternate solution to Day 2-2 that doesn't use applicative. --- 2_alt.hs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 2_alt.hs 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