Added alternate solution to Day 2-2 that doesn't use applicative.

This commit is contained in:
Jonathan Chan 2017-12-02 11:11:28 -08:00
parent f2dd458149
commit f374478dd2
1 changed files with 28 additions and 0 deletions

28
2_alt.hs Normal file
View File

@ -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