Added alternate solution to Day 2-2 that doesn't use applicative.
This commit is contained in:
parent
f2dd458149
commit
f374478dd2
|
@ -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
|
Loading…
Reference in New Issue