Skip to content

Commit

Permalink
Implement 2024 day 13 in terraform
Browse files Browse the repository at this point in the history
  • Loading branch information
bertptrs committed Dec 27, 2024
1 parent b23676b commit 5eaef74
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 1 deletion.
48 changes: 48 additions & 0 deletions 2024/bonus/day13/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
variable "input" {
type = string
default = <<-EOT
Button A: X+94, Y+34
Button B: X+22, Y+67
Prize: X=8400, Y=5400
Button A: X+26, Y+66
Button B: X+67, Y+21
Prize: X=12748, Y=12176
Button A: X+17, Y+86
Button B: X+84, Y+37
Prize: X=7870, Y=6450
Button A: X+69, Y+23
Button B: X+27, Y+71
Prize: X=18641, Y=10279
EOT
}

locals {
machines = regexall(
"Button A: X\\+(\\d+), Y\\+(\\d+)\nButton B: X\\+(\\d+), Y\\+(\\d+)\nPrize: X=(\\d+), Y=(\\d+)",
var.input
)
}

module "solve1" {
source = "./solve"
machines = local.machines
}

module "solve2" {
source = "./solve"
machines = [
for machine in local.machines :
[machine[0], machine[1], machine[2], machine[3], 10000000000000 + tonumber(machine[4]), 10000000000000 + tonumber(machine[5])]
]
}

output "part1" {
value = module.solve1.solutions
}

output "part2" {
value = module.solve2.solutions
}
34 changes: 34 additions & 0 deletions 2024/bonus/day13/solve/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
variable "machines" {
type = list(list(number))
}

locals {
a_substitutions = [
for machine in var.machines :
[-machine[2] / machine[0], machine[4] / machine[0]]
]

b_equations = [
for i in range(length(var.machines)) :
[
var.machines[i][3] + local.a_substitutions[i][0] * var.machines[i][1],
var.machines[i][5] - local.a_substitutions[i][1] * var.machines[i][1]
]
]

b = [for eq in local.b_equations : floor(eq[1] / eq[0] + 0.5)]

a = [
for i in range(length(var.machines)) :
floor((var.machines[i][4] - local.b[i] * var.machines[i][2]) / var.machines[i][0] + 0.5)
]
}

output "solutions" {
value = sum([
for i in range(length(var.machines)) :
3 * local.a[i] + local.b[i]
if var.machines[i][0] * local.a[i] + var.machines[i][2] * local.b[i] == var.machines[i][4]
&& var.machines[i][1] * local.a[i] + var.machines[i][3] * local.b[i] == var.machines[i][5]
])
}
13 changes: 13 additions & 0 deletions 2024/bonus/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,19 @@ output "day11_2" {
value = module.day11.part2
}

module "day13" {
source = "./day13"
input = file("../inputs/13.txt")
}

output "day13_1" {
value = module.day13.part1
}

output "day13_2" {
value = module.day13.part2
}

module "day19" {
source = "./day19"
input = file("../inputs/19.txt")
Expand Down
19 changes: 18 additions & 1 deletion 2024/bonus/tests.tftest.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,23 @@ run "day11" {
}
}

run "day13" {
command = plan

module {
source = "./day13"
}

variables {
input = file("../tests/samples/13.txt")
}

assert {
condition = output.part1 == 480
error_message = "Part1 output is wrong"
}
}

run "day19" {
command = plan

Expand Down Expand Up @@ -177,7 +194,7 @@ run "day25" {
}

assert {
condition = output.part1 == 3
condition = output.part1 == [[94, 34, 22, 67, 8400, 5400]]
error_message = "Part1 output is wrong"
}
}

0 comments on commit 5eaef74

Please sign in to comment.