Use match gropus & interpolation
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user