diff --git a/advent-of-code-2024.ipkg b/advent-of-code-2024.ipkg index 91f30e4..1f46027 100644 --- a/advent-of-code-2024.ipkg +++ b/advent-of-code-2024.ipkg @@ -17,4 +17,4 @@ modules = Main, Utils, AllDays, Data.Problem, Day1.Part1, Day1.Part2, Day2.Part1, Day2.Part2, - Day3.Part1 + Day3.Part1, Day3.Part2 diff --git a/src/AllDays.idr b/src/AllDays.idr index 242f8b9..5b288cb 100644 --- a/src/AllDays.idr +++ b/src/AllDays.idr @@ -5,3 +5,4 @@ import public Day1.Part2 import public Day2.Part1 import public Day2.Part2 import public Day3.Part1 +import public Day3.Part2 diff --git a/src/Day3/Part2.idr b/src/Day3/Part2.idr new file mode 100644 index 0000000..8b765bd --- /dev/null +++ b/src/Day3/Part2.idr @@ -0,0 +1,26 @@ +module Day3.Part2 + +import Data.Either +import Data.Maybe +import Data.String +import Data.String.Parser +import Utils + +import Day3.Part1 + +--- PARSING + +export +mulsDo : Parser (List Integer) +mulsDo = map join $ many $ do + s <- scan $ string "do()" <|> string "don't()" + if s == "do()" + then many $ scanWhile (requireFailure (string "do()" <|> string "don't()")) mul + else pure [] + +--- SOLUTION + +export +solution : String -> Integer +solution = fromMaybe 0 . map (sum . fst) . eitherToMaybe . + parse mulsDo . ("do()" ++) diff --git a/src/Main.idr b/src/Main.idr index 3d43250..079d5c8 100644 --- a/src/Main.idr +++ b/src/Main.idr @@ -14,7 +14,7 @@ import AllDays ||| The latest problem that has been solved. -- NOTE: UPDATE AFTER EACH SOLUTION latest : Problem -latest = Pr 3 Part1 +latest = Pr 3 Part2 solMap : SortedMap Problem (String -> String)