Skip to content

Commit 008a769

Browse files
committed
Solve 2024 day 3 part 2
1 parent 716c6c0 commit 008a769

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/main/scala/eu/sim642/adventofcode2024/Day3.scala

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,25 @@ object Day3 {
1010
.sum
1111
}
1212

13+
private val mulRegex2 = """mul\((\d{1,3}),(\d{1,3})\)|do(n't)?\(\)""".r
14+
15+
def sumUncorruptedMuls2(s: String): Int = {
16+
mulRegex2.findAllMatchIn(s)
17+
.foldLeft((true, 0))({ case ((enabled, sum), m) =>
18+
(enabled, m.matched) match {
19+
case (_, "do()") => (true, sum)
20+
case (_, "don't()") => (false, sum)
21+
case (true, _) => (enabled, sum + m.group(1).toInt * m.group(2).toInt)
22+
case (false, _) => (enabled, sum)
23+
}
24+
})
25+
._2
26+
}
27+
1328
lazy val input: String = scala.io.Source.fromInputStream(getClass.getResourceAsStream("day3.txt")).mkString.trim
1429

1530
def main(args: Array[String]): Unit = {
1631
println(sumUncorruptedMuls(input))
32+
println(sumUncorruptedMuls2(input))
1733
}
1834
}

src/test/scala/eu/sim642/adventofcode2024/Day3Test.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import org.scalatest.funsuite.AnyFunSuite
66
class Day3Test extends AnyFunSuite {
77

88
val exampleInput = """xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))"""
9+
val exampleInput2 = """xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))"""
910

1011
test("Part 1 examples") {
1112
assert(sumUncorruptedMuls(exampleInput) == 161)
@@ -14,4 +15,12 @@ class Day3Test extends AnyFunSuite {
1415
test("Part 1 input answer") {
1516
assert(sumUncorruptedMuls(input) == 182780583)
1617
}
18+
19+
test("Part 2 examples") {
20+
assert(sumUncorruptedMuls2(exampleInput2) == 48)
21+
}
22+
23+
test("Part 2 input answer") {
24+
assert(sumUncorruptedMuls2(input) == 90772405)
25+
}
1726
}

0 commit comments

Comments
 (0)