-- Writeup at https://work.njae.me.uk/2022/12/02/advent-of-code-2022-day-2/
-import System.Environment
-import Data.Text ()
+import AoC
+import Data.Text (Text)
import qualified Data.Text.IO as TIO
import Data.Attoparsec.Text hiding (Result)
import Control.Applicative
let match2 = successfulParse2 text
print $ part2 match2
-getDataFileName :: IO String
-getDataFileName =
- do args <- getArgs
- progName <- getProgName
- let baseDataName = if null args
- then progName
- else head args
- let dataFileName = "data/" ++ baseDataName ++ ".txt"
- return dataFileName
-
part1 :: [Round] -> Int
part1 = sum . fmap scoreRound
-- Parse the input file
+match1P :: Parser [Round]
+match2P :: Parser [ShapeResult]
+roundP :: Parser Round
+shapeResultP :: Parser ShapeResult
+p1ShapeP, p2ShapeP, aP, bP, cP, xP, yP, zP :: Parser Shape
+resultP, xrP, yrP, zrP :: Parser Result
+
match1P = roundP `sepBy` endOfLine
roundP = Round <$> p1ShapeP <*> (" " *> p2ShapeP)
yrP = Draw <$ "Y"
zrP = Win <$ "Z"
--- successfulParse :: Text -> (Integer, [Maybe Integer])
+successfulParse1 :: Text -> [Round]
successfulParse1 input =
case parseOnly match1P input of
Left _err -> [] -- TIO.putStr $ T.pack $ parseErrorPretty err
- Right match -> match
+ Right matches -> matches
+successfulParse2 :: Text -> [ShapeResult]
successfulParse2 input =
case parseOnly match2P input of
Left _err -> [] -- TIO.putStr $ T.pack $ parseErrorPretty err
- Right match -> match
+ Right matches -> matches