|
- module Main where
-
- main :: IO ()
- main = do
- raw <- readFile "day1.txt"
- let ls = map read $ lines raw :: [Integer]
- in do
- case (solveA ls) of
- Nothing -> error "no answer"
- (Just x) -> putStrLn $ "day1a: " ++ (show x)
- case (solveB ls) of
- Nothing -> error "no answer"
- (Just x) -> putStrLn $ "day1b: " ++ (show x)
-
- solveA :: [Integer] -> Maybe Integer
- solveA = solveX (\(x,y) -> x * y)
- (\xs -> [ (x,y) | x <- xs
- , y <- xs
- , x + y == 2020 ])
-
- solveB :: [Integer] -> Maybe Integer
- solveB = solveX (\(x,y,z) -> x * y * z)
- (\xs -> [ (x,y,z) | x <- xs
- , y <- xs
- , z <- xs
- , x + y + z == 2020 ])
-
- solveX :: Eq a => (a -> Integer) -> ([Integer] -> [a]) -> [Integer] -> Maybe Integer
- solveX _ _ [] = Nothing
- solveX f g l = if ls == []
- then Nothing
- else Just $ (f . head) ls
- where
- ls = g l
|