Use match gropus & interpolation

This commit is contained in:
Christian
2024-12-03 16:47:09 +01:00
parent 49c817a0c1
commit 4bdfc14dcd

View File

@@ -3,23 +3,24 @@ package dev.ctsk.aoc.days
import dev.ctsk.aoc._ import dev.ctsk.aoc._
object Day03 extends Solver(3): object Day03 extends Solver(3):
def mul(segment: String): Int =
segment.substring(4, segment.length - 1).split(",").map(_.toInt).product
def part1(input: String): Int = def part1(input: String): Int =
val pattern = """mul\(\d{1,3},\d{1,3}\)""".r val pattern = """mul\((\d{1,3}),(\d{1,3})\)""".r
pattern.findAllIn(input).toList.map(mul).sum pattern
.findAllIn(input)
.matchData
.map(m => m.group(1).toInt * m.group(2).toInt)
.sum
def part2(line: String): Int = def part2(line: String): Int =
val pattern = """(mul\(\d{1,3},\d{1,3}\))|do\(\)|don't\(\)""".r; val pattern = """(mul\(\d{1,3},\d{1,3}\))|do\(\)|don't\(\)""".r;
pattern pattern
.findAllIn(line) .findAllIn(line)
.foldLeft((true, 0)) { case ((enabled, sum), curr) => .foldLeft((true, 0)) { case ((enabled, sum), curr) =>
curr match curr match
case "do()" => (true, sum) case "do()" => (true, sum)
case "don't()" => (false, sum) case "don't()" => (false, sum)
case _ => (enabled, if enabled then sum + mul(curr) else sum) case s"mul($a,$b)" =>
(enabled, if enabled then sum + a.toInt * b.toInt else sum)
} }
._2 ._2