aboutsummaryrefslogtreecommitdiff
path: root/2020/01/first.hs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2020/01/first.hs29
1 files changed, 29 insertions, 0 deletions
diff --git a/2020/01/first.hs b/2020/01/first.hs
new file mode 100644
index 0000000..5a615a9
--- /dev/null
+++ b/2020/01/first.hs
@@ -0,0 +1,29 @@
+module Main where
+
+import Control.Monad (when)
+import Data.Maybe (catMaybes, fromJust)
+import System.Exit (die)
+
+exampleExpectedOutput = 514579
+
+compute2020 :: Int -> Int -> Maybe Int
+compute2020 a b
+ | a + b == 2020 = Just (a * b)
+ | otherwise = Nothing
+
+compute :: String -> Int
+compute input = head . catMaybes $ processInput inputList
+ where
+ inputList :: [Int]
+ inputList = map read $ lines input
+ processInput :: [Int] -> [Maybe Int]
+ processInput (_:[]) = [Nothing]
+ processInput (x:xs) = map (compute2020 x) xs ++ processInput xs
+
+main :: IO ()
+main = do
+ example <- readFile "example"
+ let exampleOutput = compute example
+ when (exampleOutput /= exampleExpectedOutput) (die $ "example failed: got " ++ show exampleOutput ++ " instead of " ++ show exampleExpectedOutput)
+ input <- readFile "input"
+ print $ compute input