advent-of-code/hs/src/Aoc/Y2020/D01.hs
2020-12-06 12:29:00 +00:00

40 lines
840 B
Haskell

module Aoc.Y2020.D01
( day
) where
import Control.Monad
import Aoc.Day
import Aoc.Parse
findPair :: [Integer] -> (Integer, Integer)
findPair l = head $ do
a <- l
b <- l
guard $ a + b == 2020
pure (a, b)
findTriple :: [Integer] -> (Integer, Integer, Integer)
findTriple l = head $ do
a <- l
b <- l
c <- l
guard $ a + b + c == 2020
pure (a, b, c)
parser :: Parser [Integer]
parser = manyLines decimal
solver :: [Integer] -> IO ()
solver values = do
putStrLn ">> Part 1"
let (x1, x2) = findPair values
putStrLn $ show x1 ++ " * " ++ show x2 ++ " = " ++ show (x1 * x2)
putStrLn ""
putStrLn ">> Part 2"
let (y1, y2, y3) = findTriple values
putStrLn $ show y1 ++ " * " ++ show y2 ++ " * " ++ show y3 ++ " = " ++ show (y1 * y2 * y3)
day :: Day
day = dayParse parser solver