diff options
Diffstat (limited to '2023/1-Trebuchet/first.hs')
-rw-r--r-- | 2023/1-Trebuchet/first.hs | 44 |
1 files changed, 0 insertions, 44 deletions
diff --git a/2023/1-Trebuchet/first.hs b/2023/1-Trebuchet/first.hs deleted file mode 100644 index 366d28e..0000000 --- a/2023/1-Trebuchet/first.hs +++ /dev/null @@ -1,44 +0,0 @@ --- requires cabal install --lib megaparsec parser-combinators -module Main (main) where -import Control.Monad (void, when) -import Data.Char qualified as C -import Data.List qualified as L -import Data.Map qualified as M -import Data.Maybe -import Data.Set qualified as S -import Data.Void (Void) -import Text.Megaparsec -import Text.Megaparsec.Char - -exampleExpectedOutput = 142 - -type Input = [String] - -type Parser = Parsec Void String - -parseInput' :: Parser Input -parseInput' = some (some alphaNumChar <* eol) <* eof - -parseInput :: String -> IO Input -parseInput filename = do - input <- readFile filename - case runParser parseInput' filename input of - Left bundle -> error $ errorBundlePretty bundle - Right input' -> return input' - -process :: Int -> String -> Int -process acc str = acc + f * 10 + l - where - f = C.digitToInt . head $ dropWhile C.isLetter str - l = C.digitToInt . head . dropWhile C.isLetter $ reverse str - -compute :: Input -> Int -compute = L.foldl' process 0 - -main :: IO () -main = do - example <- parseInput "example" - let exampleOutput = compute example - when (exampleOutput /= exampleExpectedOutput) (error $ "example failed: got " ++ show exampleOutput ++ " instead of " ++ show exampleExpectedOutput) - input <- parseInput "input" - print $ compute input |