Skip to content

Commit 2beccdd

Browse files
committed
day 11 part 1 in terraform
1 parent 023807a commit 2beccdd

File tree

5 files changed

+230
-0
lines changed

5 files changed

+230
-0
lines changed

2024/bonus/day11/main.tf

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
variable "input" {
2+
type = string
3+
}
4+
5+
locals {
6+
nums = [for s in split(" ", chomp(var.input)) : tonumber(s)]
7+
}
8+
9+
module "step1" {
10+
source = "./step"
11+
12+
prev = local.nums
13+
}
14+
15+
module "step2" {
16+
source = "./step"
17+
18+
prev = module.step1.next
19+
}
20+
21+
module "step3" {
22+
source = "./step"
23+
24+
prev = module.step2.next
25+
}
26+
27+
module "step4" {
28+
source = "./step"
29+
30+
prev = module.step3.next
31+
}
32+
33+
module "step5" {
34+
source = "./step"
35+
36+
prev = module.step4.next
37+
}
38+
39+
module "step6" {
40+
source = "./step"
41+
42+
prev = module.step5.next
43+
}
44+
45+
module "step7" {
46+
source = "./step"
47+
48+
prev = module.step6.next
49+
}
50+
51+
module "step8" {
52+
source = "./step"
53+
54+
prev = module.step7.next
55+
}
56+
57+
module "step9" {
58+
source = "./step"
59+
60+
prev = module.step8.next
61+
}
62+
63+
module "step10" {
64+
source = "./step"
65+
66+
prev = module.step9.next
67+
}
68+
69+
module "step11" {
70+
source = "./step"
71+
72+
prev = module.step10.next
73+
}
74+
75+
module "step12" {
76+
source = "./step"
77+
78+
prev = module.step11.next
79+
}
80+
81+
module "step13" {
82+
source = "./step"
83+
84+
prev = module.step12.next
85+
}
86+
87+
module "step14" {
88+
source = "./step"
89+
90+
prev = module.step13.next
91+
}
92+
93+
module "step15" {
94+
source = "./step"
95+
96+
prev = module.step14.next
97+
}
98+
99+
module "step16" {
100+
source = "./step"
101+
102+
prev = module.step15.next
103+
}
104+
105+
module "step17" {
106+
source = "./step"
107+
108+
prev = module.step16.next
109+
}
110+
111+
module "step18" {
112+
source = "./step"
113+
114+
prev = module.step17.next
115+
}
116+
117+
module "step19" {
118+
source = "./step"
119+
120+
prev = module.step18.next
121+
}
122+
123+
module "step20" {
124+
source = "./step"
125+
126+
prev = module.step19.next
127+
}
128+
129+
module "step21" {
130+
source = "./step"
131+
132+
prev = module.step20.next
133+
}
134+
135+
module "step22" {
136+
source = "./step"
137+
138+
prev = module.step21.next
139+
}
140+
141+
module "step23" {
142+
source = "./step"
143+
144+
prev = module.step22.next
145+
}
146+
147+
module "step24" {
148+
source = "./step"
149+
150+
prev = module.step23.next
151+
}
152+
153+
module "step25" {
154+
source = "./step"
155+
156+
prev = module.step24.next
157+
}
158+
159+
output "part1" {
160+
value = length(flatten(module.step25.next))
161+
}

2024/bonus/day11/step/main.tf

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
variable "prev" {
2+
type = list(number)
3+
}
4+
5+
locals {
6+
values = [
7+
for num in var.prev : num == 0 ? [1]
8+
: length(tostring(num)) % 2 == 0
9+
? [tonumber(substr(tostring(num), 0, length(tostring(num)) / 2)), tonumber(substr(tostring(num), length(tostring(num)) / 2, 10))]
10+
: [num * 2024]
11+
]
12+
}
13+
14+
# module "transform" {
15+
# source = "../transform"
16+
17+
# count = length(var.prev)
18+
# num = var.prev[count.index]
19+
# }
20+
21+
# output "next" {
22+
# value = flatten(module.transform[*].result)
23+
# }
24+
25+
output "next" {
26+
value = flatten(local.values)
27+
}

2024/bonus/day11/transform/main.tf

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
variable "num" {
2+
type = number
3+
}
4+
5+
locals {
6+
as_str = tostring(var.num)
7+
len = length(local.as_str)
8+
half = floor(length(local.as_str) / 2)
9+
first = try(tonumber(substr(local.as_str, 0, local.half)), -1)
10+
second = try(tonumber(substr(local.as_str, local.half, local.half)), -1)
11+
}
12+
13+
output "result" {
14+
value = var.num == 0 ? [1] : local.len % 2 == 0 ? [local.first, local.second] : [var.num * 2024]
15+
}

2024/bonus/main.tf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,12 @@ module "day05" {
6565
output "day05_1" {
6666
value = module.day05.part1
6767
}
68+
69+
module "day11" {
70+
source = "./day11"
71+
input = file("../inputs/11.txt")
72+
}
73+
74+
output "day11_1" {
75+
value = module.day11.part1
76+
}

2024/bonus/tests.tftest.hcl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,3 +130,21 @@ run "day5_1" {
130130
error_message = "Part1 output is wrong"
131131
}
132132
}
133+
134+
run "day11" {
135+
command = plan
136+
137+
module {
138+
source = "./day11"
139+
}
140+
141+
variables {
142+
input = "125 17"
143+
}
144+
145+
assert {
146+
condition = output.part1 == 55312
147+
error_message = "Part1 output is wrong"
148+
}
149+
150+
}

0 commit comments

Comments
 (0)