This commit is contained in:
Andrew Glaze
2024-12-03 01:01:43 -05:00
parent ca7903c1c2
commit 0478b6d7b3
2 changed files with 94 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
package day03
import kotlin.io.println
class Day03 {
fun parse(input: String): String {
throw NotImplementedError()
}
fun part1(input: String): Int {
val regex = Regex("mul\\((\\d{1,3}),(\\d{1,3})\\)")
val muls = regex.findAll(input)
val product = muls.map { match ->
match.groupValues.subList(1, match.groupValues.count())
.map { it.toInt() }
.toList()
.reduce { acc, next -> acc * next }
}
.toList()
.sum()
return product
}
fun part2(input: String): Int {
val regex = Regex("(?:mul\\((\\d{1,3}),(\\d{1,3})\\))|(do(?:n't)?\\(\\))")
val muls = regex.findAll(input)
var enable = true
val product = muls.map { match ->
var tmp = 0
if (match.value == "do()") {
enable = true
} else if (match.value == "don't()") {
enable = false
} else if (enable) {
tmp = match.groupValues.subList(1, 3)
.map { it.toInt() }
.toList()
.reduce { acc, next -> acc * next }
}
tmp
}
.toList()
.sum()
return product
}
}

View File

@@ -0,0 +1,42 @@
package day03
import kotlin.test.Test
import util.InputDownloader
class Day03Test {
val dayNum = 3
val day = Day03()
val input = InputDownloader().getInput(dayNum)
val example = "xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))"
val example2 = "xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))"
@Test fun part1Example() {
part1(example, 161)
}
@Test fun part1Solution() {
part1(input, 153469856)
}
@Test fun part2Example() {
part2(example2, 48)
}
@Test fun part2Solution() {
part2(input, 77055967)
}
fun part1(input: String, expected: Int) {
val output = day.part1(input)
println("output: $output")
assert(output == expected)
}
fun part2(input: String, expected: Int) {
val output = day.part2(input)
println("output: $output")
assert(output == expected)
}
}