Implement efficient algorithm in TF

This commit is contained in:
2024-12-11 22:33:42 +01:00
parent 2beccdd0e6
commit 612c4d19ef
2 changed files with 20 additions and 10 deletions

View File

@@ -4,12 +4,15 @@ variable "input" {
locals { locals {
nums = [for s in split(" ", chomp(var.input)) : tonumber(s)] nums = [for s in split(" ", chomp(var.input)) : tonumber(s)]
grouped = { for num in local.nums : num => 1... }
total = { for k, v in local.grouped : k => sum(v) }
} }
module "step1" { module "step1" {
source = "./step" source = "./step"
prev = local.nums prev = local.total
} }
module "step2" { module "step2" {
@@ -157,5 +160,5 @@ module "step25" {
} }
output "part1" { output "part1" {
value = length(flatten(module.step25.next)) value = sum(values(module.step25.next))
} }

View File

@@ -1,14 +1,21 @@
variable "prev" { variable "prev" {
type = list(number) type = map(number)
}
module "transform" {
source = "../transform"
for_each = var.prev
num = each.key
} }
locals { locals {
values = [ by_value = flatten([
for num in var.prev : num == 0 ? [1] for key, value in module.transform :
: length(tostring(num)) % 2 == 0 [for result in value.result : { num = result, count = var.prev[key] }]
? [tonumber(substr(tostring(num), 0, length(tostring(num)) / 2)), tonumber(substr(tostring(num), length(tostring(num)) / 2, 10))] ])
: [num * 2024]
] grouped = { for kv in local.by_value : kv.num => kv.count... }
} }
# module "transform" { # module "transform" {
@@ -23,5 +30,5 @@ locals {
# } # }
output "next" { output "next" {
value = flatten(local.values) value = { for num, groups in local.grouped : num => sum(groups) }
} }