Implement 2024 day 3 part 2 in Terraform

No one's going to stop me, not even common sense
This commit is contained in:
2024-12-03 19:33:47 +01:00
parent ff2e421437
commit 608f3dc621
4 changed files with 53 additions and 0 deletions

View File

@@ -4,8 +4,21 @@ variable "input" {
locals {
muls = regexall("mul\\((\\d+),(\\d+)\\)", var.input)
ops = regexall("(don't\\(\\)|do\\(\\)|mul\\((\\d+),(\\d+)\\))", var.input)
}
module "should_execute" {
count = length(local.ops)
source = "./should_execute"
index = count.index
ops = local.ops
}
output "part1" {
value = sum([for mul in local.muls : parseint(mul[1], 10) * parseint(mul[0], 10)])
}
output "part2" {
value = sum(module.should_execute[*].value)
}

View File

@@ -0,0 +1,19 @@
variable "ops" {
type = list(list(string))
}
variable "index" {
type = number
}
locals {
is_mul = startswith(var.ops[var.index][0], "mul")
subslice = reverse(slice(var.ops[*][0], 0, var.index))
do_pos = contains(local.subslice, "do()") ? index(local.subslice, "do()") : var.index
dont_pos = contains(local.subslice, "don't()") ? index(local.subslice, "don't()") : var.index + 1
}
output "value" {
value = (local.is_mul && local.do_pos < local.dont_pos) ? (parseint(var.ops[var.index][1], 10) * parseint(var.ops[var.index][2], 10)) : 0
}

View File

@@ -36,3 +36,7 @@ module "day03" {
output "day03_1" {
value = module.day03.part1
}
output "day03_2" {
value = module.day03.part2
}

View File

@@ -57,3 +57,20 @@ run "day3_1" {
error_message = "Part1 output is wrong"
}
}
run "day3_2" {
command = plan
module {
source = "./day03"
}
variables {
input = "xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))"
}
assert {
condition = output.part2 == 48
error_message = "Part2 output is wrong"
}
}