From 96e84e4199840e2400f881114b3b2830ac2653b8 Mon Sep 17 00:00:00 2001 From: Maciej Jur Date: Mon, 4 Dec 2023 23:55:27 +0100 Subject: [PATCH] haskell: 2023 main --- 2023/haskell/aoc2023.cabal | 1 - 2023/haskell/app/Main.hs | 53 +++++++++++---------------------- 2023/haskell/solutions/Day01.hs | 4 +-- 3 files changed, 20 insertions(+), 38 deletions(-) diff --git a/2023/haskell/aoc2023.cabal b/2023/haskell/aoc2023.cabal index 1fa4890..22e6fd3 100644 --- a/2023/haskell/aoc2023.cabal +++ b/2023/haskell/aoc2023.cabal @@ -23,7 +23,6 @@ library Day03 Day04 - -- Modules included in this library but not exported. -- other-modules: -- LANGUAGE extensions used by modules in this package. diff --git a/2023/haskell/app/Main.hs b/2023/haskell/app/Main.hs index dad4db1..177f4b7 100644 --- a/2023/haskell/app/Main.hs +++ b/2023/haskell/app/Main.hs @@ -1,5 +1,6 @@ module Main where +import Data.Text (Text) import Utils (readInput) import qualified Day01 import qualified Day02 @@ -7,43 +8,25 @@ import qualified Day03 import qualified Day04 -day01 :: IO () -day01 = do - input <- Day01.parse <$> readInput 1 - print . Day01.solveA $ input - print . Day01.solveB $ input - -day02 :: IO () -day02 = do - text <- readInput 2 - case Day02.parse text of +run :: (Show b, Show c) + => Int + -> (Text -> Either String a) + -> (a -> b) + -> (a -> c) + -> IO () +run day parse solveA solveB = do + text <- readInput day + case parse text of Left err -> putStrLn err - Right xd -> do - print . Day02.solveA $ xd - print . Day02.solveB $ xd - -day03 :: IO () -day03 = do - text <- readInput 3 - case Day03.parse text of - Left err -> putStrLn err - Right xd -> do - print . Day03.solveA $ xd - print . Day03.solveB $ xd - -day04 :: IO () -day04 = do - text <- readInput 4 - case Day04.parse text of - Left err -> putStrLn err - Right xd -> do - print . Day04.solveA $ xd - print . Day04.solveB $ xd + Right re -> do + putStrLn $ "Day " <> show day + print . solveA $ re + print . solveB $ re main :: IO () main = do - -- day01 - -- day02 - -- day03 - day04 + run 1 Day01.parse Day01.solveA Day01.solveB + run 2 Day02.parse Day02.solveA Day02.solveB + run 3 Day03.parse Day03.solveA Day03.solveB + run 4 Day04.parse Day04.solveA Day04.solveB pure () diff --git a/2023/haskell/solutions/Day01.hs b/2023/haskell/solutions/Day01.hs index cf63bab..5103404 100644 --- a/2023/haskell/solutions/Day01.hs +++ b/2023/haskell/solutions/Day01.hs @@ -7,8 +7,8 @@ import Data.Char (isDigit) import Data.Maybe (mapMaybe, listToMaybe) -parse :: Text -> [Text] -parse = T.lines +parse :: Text -> Either String [Text] +parse = Right . T.lines merge :: [Int] -> Int merge xs = 10 * head xs + last xs