Use match gropus & interpolation
This commit is contained in:
@@ -3,23 +3,24 @@ package dev.ctsk.aoc.days
|
||||
import dev.ctsk.aoc._
|
||||
|
||||
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 =
|
||||
val pattern = """mul\(\d{1,3},\d{1,3}\)""".r
|
||||
pattern.findAllIn(input).toList.map(mul).sum
|
||||
val pattern = """mul\((\d{1,3}),(\d{1,3})\)""".r
|
||||
pattern
|
||||
.findAllIn(input)
|
||||
.matchData
|
||||
.map(m => m.group(1).toInt * m.group(2).toInt)
|
||||
.sum
|
||||
|
||||
def part2(line: String): Int =
|
||||
val pattern = """(mul\(\d{1,3},\d{1,3}\))|do\(\)|don't\(\)""".r;
|
||||
|
||||
pattern
|
||||
.findAllIn(line)
|
||||
.foldLeft((true, 0)) { case ((enabled, sum), curr) =>
|
||||
curr match
|
||||
case "do()" => (true, 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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user