Skip to content

Commit e50399b

Browse files
committed
2021 d24: add input and original solution
1 parent 44a329f commit e50399b

File tree

2 files changed

+301
-0
lines changed

2 files changed

+301
-0
lines changed

2021/inputs/2021_24.txt

+252
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
inp w
2+
mul x 0
3+
add x z
4+
mod x 26
5+
div z 1
6+
add x 12
7+
eql x w
8+
eql x 0
9+
mul y 0
10+
add y 25
11+
mul y x
12+
add y 1
13+
mul z y
14+
mul y 0
15+
add y w
16+
add y 4
17+
mul y x
18+
add z y
19+
inp w
20+
mul x 0
21+
add x z
22+
mod x 26
23+
div z 1
24+
add x 15
25+
eql x w
26+
eql x 0
27+
mul y 0
28+
add y 25
29+
mul y x
30+
add y 1
31+
mul z y
32+
mul y 0
33+
add y w
34+
add y 11
35+
mul y x
36+
add z y
37+
inp w
38+
mul x 0
39+
add x z
40+
mod x 26
41+
div z 1
42+
add x 11
43+
eql x w
44+
eql x 0
45+
mul y 0
46+
add y 25
47+
mul y x
48+
add y 1
49+
mul z y
50+
mul y 0
51+
add y w
52+
add y 7
53+
mul y x
54+
add z y
55+
inp w
56+
mul x 0
57+
add x z
58+
mod x 26
59+
div z 26
60+
add x -14
61+
eql x w
62+
eql x 0
63+
mul y 0
64+
add y 25
65+
mul y x
66+
add y 1
67+
mul z y
68+
mul y 0
69+
add y w
70+
add y 2
71+
mul y x
72+
add z y
73+
inp w
74+
mul x 0
75+
add x z
76+
mod x 26
77+
div z 1
78+
add x 12
79+
eql x w
80+
eql x 0
81+
mul y 0
82+
add y 25
83+
mul y x
84+
add y 1
85+
mul z y
86+
mul y 0
87+
add y w
88+
add y 11
89+
mul y x
90+
add z y
91+
inp w
92+
mul x 0
93+
add x z
94+
mod x 26
95+
div z 26
96+
add x -10
97+
eql x w
98+
eql x 0
99+
mul y 0
100+
add y 25
101+
mul y x
102+
add y 1
103+
mul z y
104+
mul y 0
105+
add y w
106+
add y 13
107+
mul y x
108+
add z y
109+
inp w
110+
mul x 0
111+
add x z
112+
mod x 26
113+
div z 1
114+
add x 11
115+
eql x w
116+
eql x 0
117+
mul y 0
118+
add y 25
119+
mul y x
120+
add y 1
121+
mul z y
122+
mul y 0
123+
add y w
124+
add y 9
125+
mul y x
126+
add z y
127+
inp w
128+
mul x 0
129+
add x z
130+
mod x 26
131+
div z 1
132+
add x 13
133+
eql x w
134+
eql x 0
135+
mul y 0
136+
add y 25
137+
mul y x
138+
add y 1
139+
mul z y
140+
mul y 0
141+
add y w
142+
add y 12
143+
mul y x
144+
add z y
145+
inp w
146+
mul x 0
147+
add x z
148+
mod x 26
149+
div z 26
150+
add x -7
151+
eql x w
152+
eql x 0
153+
mul y 0
154+
add y 25
155+
mul y x
156+
add y 1
157+
mul z y
158+
mul y 0
159+
add y w
160+
add y 6
161+
mul y x
162+
add z y
163+
inp w
164+
mul x 0
165+
add x z
166+
mod x 26
167+
div z 1
168+
add x 10
169+
eql x w
170+
eql x 0
171+
mul y 0
172+
add y 25
173+
mul y x
174+
add y 1
175+
mul z y
176+
mul y 0
177+
add y w
178+
add y 2
179+
mul y x
180+
add z y
181+
inp w
182+
mul x 0
183+
add x z
184+
mod x 26
185+
div z 26
186+
add x -2
187+
eql x w
188+
eql x 0
189+
mul y 0
190+
add y 25
191+
mul y x
192+
add y 1
193+
mul z y
194+
mul y 0
195+
add y w
196+
add y 11
197+
mul y x
198+
add z y
199+
inp w
200+
mul x 0
201+
add x z
202+
mod x 26
203+
div z 26
204+
add x -1
205+
eql x w
206+
eql x 0
207+
mul y 0
208+
add y 25
209+
mul y x
210+
add y 1
211+
mul z y
212+
mul y 0
213+
add y w
214+
add y 12
215+
mul y x
216+
add z y
217+
inp w
218+
mul x 0
219+
add x z
220+
mod x 26
221+
div z 26
222+
add x -4
223+
eql x w
224+
eql x 0
225+
mul y 0
226+
add y 25
227+
mul y x
228+
add y 1
229+
mul z y
230+
mul y 0
231+
add y w
232+
add y 3
233+
mul y x
234+
add z y
235+
inp w
236+
mul x 0
237+
add x z
238+
mod x 26
239+
div z 26
240+
add x -12
241+
eql x w
242+
eql x 0
243+
mul y 0
244+
add y 25
245+
mul y x
246+
add y 1
247+
mul z y
248+
mul y 0
249+
add y w
250+
add y 13
251+
mul y x
252+
add z y

2021/original_solutions/day24.py

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import z3
2+
3+
def add_constraints(s, inp):
4+
for digit in inp:
5+
s.add(digit > 0)
6+
s.add(digit < 10)
7+
8+
v5 = inp[1]
9+
v6 = (inp[0] + 4) * (inp[0] != 12) % 26 + 15 != v5
10+
v7 = (v5 + 11) * v6 + (25 * v6 + 1) * (inp[0] + 4) * (inp[0] != 12)
11+
v8 = (inp[2] + 7) * (v7 % 26 + 11 != inp[2]) + (25 * (v7 % 26 + 11 != inp[2]) + 1) * v7
12+
v9 = (inp[3] + 2) * (v8 % 26 - 14 != inp[3]) + v8 / 26 * (25 * (v8 % 26 - 14 != inp[3]) + 1)
13+
v10 = (inp[4] + 11) * (v9 % 26 + 12 != inp[4]) + v9 * (25 * (v9 % 26 + 12 != inp[4]) + 1)
14+
v11 = (inp[5] + 13) * (v10 % 26 - 10 != inp[5]) + v10 / 26 * (25 * (v10 % 26 - 10 != inp[5]) + 1)
15+
v12 = (inp[6] + 9) * (v11 % 26 + 11 != inp[6]) + (25 * (v11 % 26 + 11 != inp[6]) + 1) * v11
16+
v13 = (inp[7] + 12) * (v12 % 26 + 13 != inp[7]) + (25 * (v12 % 26 + 13 != inp[7]) + 1) * v12
17+
v14 = (inp[8] + 6) * (v13 % 26 - 7 != inp[8]) + v13 / 26 * (25 * (v13 % 26 - 7 != inp[8]) + 1)
18+
v15 = (inp[9] + 2) * (v14 % 26 + 10 != inp[9]) + v14 * (25 * (v14 % 26 + 10 != inp[9]) + 1)
19+
v16 = (inp[10] + 11) * (v15 % 26 - 2 != inp[10]) + v15 / 26 * (25 * (v15 % 26 - 2 != inp[10]) + 1)
20+
v17 = (inp[11] + 12) * (v16 % 26 - 1 != inp[11]) + v16 / 26 * (25 * (v16 % 26 - 1 != inp[11]) + 1)
21+
v18 = (inp[12] + 3) * (v17 % 26 - 4 != inp[12]) + v17 / 26 * (25 * (v17 % 26 - 4 != inp[12]) + 1)
22+
res = (inp[13] + 13) * (v18 % 26 - 12 != inp[13]) + v18 / 26 * (25 * (v18 % 26 - 12 != inp[13]) + 1)
23+
24+
tot = 0
25+
for digit in inp:
26+
tot = tot * 10 + digit
27+
28+
s.add(res == 0)
29+
return tot
30+
31+
def solve(inp, maximize=True):
32+
s = z3.Optimize()
33+
value = add_constraints(s, inp)
34+
35+
if maximize:
36+
s.maximize(value)
37+
else:
38+
s.minimize(value)
39+
40+
assert s.check() == z3.sat
41+
42+
m = s.model()
43+
return m.eval(value)
44+
45+
46+
inp = [z3.Int('x{}'.format(i)) for i in range(14)]
47+
48+
print('Part 1:', solve(inp, maximize=True))
49+
print('Part 2:', solve(inp, maximize=False))

0 commit comments

Comments
 (0)