-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsol_13.aes
192 lines (184 loc) · 12.4 KB
/
sol_13.aes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
@compiler >= 4.2.0
include "/Users/hans/Personal/Repos/AoC2019/11/Intcode.aes"
contract Day13 =
record game = { b0 : int, b1 : int, p : int, s : int }
entrypoint solve_1() =
let p0 = Intcode.init_proc(input(), [0])
let p1 = Intcode.run_proc_step(p0)
let board = List.reverse(p1.output)
calc_block_tiles(board, 0)
entrypoint solve_2() =
let p0 = Intcode.init_proc(input(), [0])
let p1 = Intcode.run_proc_step(p0{ mem = p0.mem{[0] = 2} })
let g = get_game_state(p1.output, {b0 = -1, b1 = -1, p = -1, s = -1})
let (p2, g2) = step'(0, p1, g)
play(p2, g2)
function play(p, g) =
if(g.b0 == g.b1) g
else
let move =
if(g.b0 < g.b1)
if(g.p < g.b1) 1 else 0
else
if(g.p > g.b1) -1 else 0
let (p2, g2) = step'(move, p, g)
play(p2, g2)
function step'(move, p, g) =
let p' = Intcode.run_proc_step(p{ input = [move], output = [] })
let g' = get_game_state(p'.output, g{ b0 = g.b1 })
(p', g')
function get_game_state(data, g) =
switch(data)
[] => g
3 :: _ :: x :: data => get_game_state(data, g{ p = x })
4 :: _ :: x :: data => get_game_state(data, g{ b1 = x })
n :: _ :: s :: data =>
if(s == -1) get_game_state(data, g{ s = n })
else get_game_state(data, g)
function calc_block_tiles(board : list(int), n : int) =
switch(board)
[] => n
_ :: _ :: 2 :: board => calc_block_tiles(board, n + 1)
_ :: _ :: _ :: board => calc_block_tiles(board, n)
function input() =
[1, 380, 379, 385, 1008, 2799, 419438, 381, 1005, 381, 12, 99, 109, 2800,
1102, 0, 1, 383, 1101, 0, 0, 382, 20102, 1, 382, 1, 21001, 383, 0, 2,
21101, 0, 37, 0, 1106, 0, 578, 4, 382, 4, 383, 204, 1, 1001, 382, 1, 382,
1007, 382, 45, 381, 1005, 381, 22, 1001, 383, 1, 383, 1007, 383, 24, 381,
1005, 381, 18, 1006, 385, 69, 99, 104, -1, 104, 0, 4, 386, 3, 384, 1007,
384, 0, 381, 1005, 381, 94, 107, 0, 384, 381, 1005, 381, 108, 1105, 1,
161, 107, 1, 392, 381, 1006, 381, 161, 1102, -1, 1, 384, 1106, 0, 119,
1007, 392, 43, 381, 1006, 381, 161, 1102, 1, 1, 384, 20101, 0, 392, 1,
21101, 22, 0, 2, 21102, 1, 0, 3, 21101, 0, 138, 0, 1106, 0, 549, 1, 392,
384, 392, 21001, 392, 0, 1, 21102, 1, 22, 2, 21102, 3, 1, 3, 21102, 1,
161, 0, 1105, 1, 549, 1101, 0, 0, 384, 20001, 388, 390, 1, 20102, 1, 389,
2, 21102, 1, 180, 0, 1105, 1, 578, 1206, 1, 213, 1208, 1, 2, 381, 1006,
381, 205, 20001, 388, 390, 1, 20102, 1, 389, 2, 21102, 1, 205, 0, 1106, 0,
393, 1002, 390, -1, 390, 1102, 1, 1, 384, 21002, 388, 1, 1, 20001, 389,
391, 2, 21101, 0, 228, 0, 1106, 0, 578, 1206, 1, 261, 1208, 1, 2, 381,
1006, 381, 253, 21001, 388, 0, 1, 20001, 389, 391, 2, 21101, 0, 253, 0,
1105, 1, 393, 1002, 391, -1, 391, 1102, 1, 1, 384, 1005, 384, 161, 20001,
388, 390, 1, 20001, 389, 391, 2, 21102, 1, 279, 0, 1106, 0, 578, 1206, 1,
316, 1208, 1, 2, 381, 1006, 381, 304, 20001, 388, 390, 1, 20001, 389, 391,
2, 21101, 0, 304, 0, 1105, 1, 393, 1002, 390, -1, 390, 1002, 391, -1, 391,
1101, 0, 1, 384, 1005, 384, 161, 20101, 0, 388, 1, 20101, 0, 389, 2,
21101, 0, 0, 3, 21102, 338, 1, 0, 1106, 0, 549, 1, 388, 390, 388, 1, 389,
391, 389, 21002, 388, 1, 1, 20101, 0, 389, 2, 21102, 4, 1, 3, 21101, 365,
0, 0, 1106, 0, 549, 1007, 389, 23, 381, 1005, 381, 75, 104, -1, 104, 0,
104, 0, 99, 0, 1, 0, 0, 0, 0, 0, 0, 296, 20, 19, 1, 1, 22, 109, 3, 22101,
0, -2, 1, 21202, -1, 1, 2, 21102, 1, 0, 3, 21102, 414, 1, 0, 1105, 1, 549,
21201, -2, 0, 1, 21202, -1, 1, 2, 21102, 429, 1, 0, 1106, 0, 601, 2101, 0,
1, 435, 1, 386, 0, 386, 104, -1, 104, 0, 4, 386, 1001, 387, -1, 387, 1005,
387, 451, 99, 109, -3, 2106, 0, 0, 109, 8, 22202, -7, -6, -3, 22201, -3,
-5, -3, 21202, -4, 64, -2, 2207, -3, -2, 381, 1005, 381, 492, 21202, -2,
-1, -1, 22201, -3, -1, -3, 2207, -3, -2, 381, 1006, 381, 481, 21202, -4,
8, -2, 2207, -3, -2, 381, 1005, 381, 518, 21202, -2, -1, -1, 22201, -3,
-1, -3, 2207, -3, -2, 381, 1006, 381, 507, 2207, -3, -4, 381, 1005, 381,
540, 21202, -4, -1, -1, 22201, -3, -1, -3, 2207, -3, -4, 381, 1006, 381,
529, 21201, -3, 0, -7, 109, -8, 2106, 0, 0, 109, 4, 1202, -2, 45, 566,
201, -3, 566, 566, 101, 639, 566, 566, 1202, -1, 1, 0, 204, -3, 204, -2,
204, -1, 109, -4, 2106, 0, 0, 109, 3, 1202, -1, 45, 594, 201, -2, 594,
594, 101, 639, 594, 594, 20102, 1, 0, -2, 109, -3, 2106, 0, 0, 109, 3,
22102, 24, -2, 1, 22201, 1, -1, 1, 21102, 1, 547, 2, 21102, 850, 1, 3,
21102, 1, 1080, 4, 21102, 630, 1, 0, 1106, 0, 456, 21201, 1, 1719, -2,
109, -3, 2105, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
2, 0, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 0, 2, 0, 1, 1, 0, 0, 2, 2, 0, 0, 2,
2, 0, 0, 0, 2, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 0, 2, 0, 2,
0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 2, 0,
0, 2, 2, 2, 0, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 0, 2, 0, 2, 2, 2,
2, 2, 0, 0, 0, 0, 1, 1, 0, 2, 2, 0, 0, 0, 2, 0, 2, 0, 0, 2, 2, 2, 2, 0, 2,
0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 0,
0, 1, 1, 0, 2, 2, 2, 0, 0, 2, 2, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0,
0, 2, 0, 0, 0, 2, 2, 0, 2, 0, 2, 0, 0, 0, 2, 2, 2, 0, 2, 2, 0, 1, 1, 0, 0,
0, 2, 2, 2, 2, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0, 2, 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2,
2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 2, 0, 2, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0,
0, 0, 0, 0, 2, 0, 0, 2, 2, 2, 0, 1, 1, 0, 2, 2, 2, 0, 2, 0, 0, 0, 2, 0, 2,
2, 2, 2, 2, 0, 2, 2, 0, 2, 0, 0, 2, 0, 2, 0, 0, 0, 2, 2, 0, 2, 0, 0, 2, 0,
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 0, 2, 2, 2, 2, 0, 0, 2, 0, 0, 2, 0, 0, 0,
2, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2,
0, 1, 1, 0, 0, 0, 0, 2, 0, 2, 2, 0, 0, 2, 2, 0, 2, 0, 0, 0, 0, 2, 0, 2, 2,
0, 2, 0, 2, 2, 2, 0, 0, 2, 0, 0, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 1, 1, 0, 2,
0, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 0, 0, 2, 0, 2, 0, 0, 2, 2, 2, 0, 0,
0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2, 2, 2, 2, 2, 2,
2, 0, 2, 2, 0, 2, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 0,
0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 0, 1, 1, 0, 0, 2, 0, 0, 2, 0, 0, 2, 0, 2, 0,
0, 0, 0, 2, 0, 2, 2, 2, 0, 0, 0, 2, 0, 0, 2, 0, 2, 0, 2, 2, 0, 0, 2, 2, 0,
2, 0, 0, 2, 2, 0, 1, 1, 0, 0, 0, 2, 2, 0, 2, 2, 2, 0, 2, 0, 2, 0, 0, 0, 0,
2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 0, 0, 2, 0, 2, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2,
0, 1, 1, 0, 2, 0, 0, 2, 0, 0, 2, 2, 0, 2, 2, 2, 2, 0, 0, 2, 0, 0, 2, 0, 0,
2, 2, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 0, 2, 0, 1, 1, 0, 2,
0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 2, 0, 2,
2, 0, 0, 2, 0, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 39, 45, 82, 25, 27, 92, 1, 12, 84, 89,
45, 7, 17, 8, 90, 61, 27, 2, 9, 32, 79, 47, 45, 7, 90, 22, 83, 77, 1, 47,
86, 47, 94, 50, 27, 63, 37, 1, 77, 68, 68, 15, 33, 11, 96, 37, 66, 65, 17,
75, 51, 90, 52, 14, 54, 36, 46, 2, 56, 3, 74, 76, 43, 3, 43, 38, 42, 27,
85, 72, 57, 24, 90, 94, 2, 26, 9, 23, 60, 46, 51, 10, 78, 60, 46, 15, 2,
86, 29, 97, 97, 29, 95, 10, 7, 74, 16, 85, 33, 31, 91, 52, 49, 98, 61, 9,
56, 70, 25, 36, 35, 38, 73, 19, 36, 8, 53, 5, 46, 18, 10, 33, 19, 44, 31,
68, 98, 74, 55, 37, 97, 49, 80, 23, 61, 49, 71, 95, 29, 5, 70, 16, 71, 11,
71, 55, 75, 41, 35, 9, 35, 37, 90, 81, 68, 8, 27, 75, 87, 6, 46, 89, 77,
77, 82, 11, 89, 81, 43, 46, 90, 24, 2, 76, 20, 87, 54, 91, 18, 13, 21, 81,
90, 16, 66, 95, 26, 95, 26, 23, 17, 83, 28, 70, 7, 54, 75, 56, 49, 31, 79,
13, 98, 38, 88, 47, 59, 13, 79, 95, 59, 64, 67, 68, 20, 44, 55, 23, 23,
26, 91, 86, 59, 56, 49, 57, 13, 31, 36, 30, 46, 45, 65, 12, 38, 68, 68,
38, 71, 15, 44, 87, 34, 75, 12, 96, 20, 48, 8, 68, 58, 63, 37, 15, 53, 96,
47, 55, 70, 46, 61, 66, 11, 54, 60, 70, 73, 65, 57, 96, 13, 32, 55, 44,
76, 57, 50, 19, 56, 57, 41, 37, 51, 58, 70, 48, 85, 91, 89, 28, 33, 22,
47, 22, 77, 17, 78, 11, 77, 83, 95, 19, 26, 73, 72, 4, 48, 62, 58, 32, 33,
94, 34, 71, 55, 92, 22, 60, 12, 92, 9, 49, 8, 22, 62, 37, 40, 73, 37, 70,
26, 10, 52, 38, 35, 40, 1, 5, 33, 74, 59, 35, 10, 53, 75, 43, 98, 86, 11,
95, 73, 28, 31, 20, 46, 84, 88, 1, 96, 77, 14, 45, 62, 98, 38, 44, 83, 7,
73, 39, 17, 80, 12, 97, 87, 83, 95, 24, 13, 13, 67, 12, 42, 86, 75, 43,
50, 63, 72, 28, 48, 44, 14, 31, 45, 19, 98, 55, 30, 27, 81, 23, 17, 78,
94, 1, 75, 4, 13, 7, 25, 86, 3, 36, 80, 71, 6, 8, 52, 26, 10, 4, 70, 95,
12, 52, 71, 9, 98, 23, 14, 56, 11, 45, 82, 50, 52, 48, 2, 34, 4, 32, 50,
64, 94, 13, 70, 24, 98, 48, 48, 80, 43, 27, 95, 89, 14, 36, 89, 9, 83, 34,
96, 13, 27, 86, 82, 45, 78, 82, 36, 58, 86, 88, 47, 33, 92, 27, 16, 87,
62, 14, 30, 35, 44, 56, 20, 39, 48, 83, 30, 43, 33, 68, 70, 58, 83, 45,
60, 16, 17, 57, 9, 56, 21, 36, 55, 36, 93, 95, 84, 50, 54, 29, 42, 72, 67,
59, 4, 61, 79, 3, 67, 60, 9, 41, 12, 85, 4, 69, 31, 70, 78, 7, 86, 33, 54,
39, 38, 47, 88, 4, 31, 97, 35, 41, 22, 88, 67, 76, 80, 52, 33, 11, 42, 67,
26, 84, 96, 31, 88, 58, 38, 35, 94, 78, 47, 83, 72, 85, 18, 33, 57, 46, 9,
14, 81, 71, 79, 12, 1, 47, 16, 8, 25, 78, 21, 94, 61, 33, 73, 57, 21, 28,
32, 5, 11, 40, 92, 56, 11, 18, 83, 84, 12, 53, 66, 65, 24, 61, 90, 77, 76,
25, 48, 83, 65, 82, 45, 74, 96, 23, 2, 66, 91, 66, 95, 48, 8, 21, 60, 21,
60, 59, 80, 44, 40, 71, 69, 25, 50, 55, 22, 36, 82, 86, 8, 37, 2, 67, 54,
66, 64, 17, 5, 25, 23, 9, 52, 41, 38, 28, 23, 97, 44, 26, 39, 68, 19, 82,
20, 43, 85, 40, 63, 82, 56, 18, 60, 15, 64, 92, 72, 48, 46, 87, 7, 94, 98,
21, 63, 85, 24, 21, 16, 66, 60, 17, 49, 83, 49, 69, 36, 34, 39, 66, 43,
85, 3, 33, 47, 26, 29, 27, 7, 5, 76, 12, 5, 21, 53, 25, 52, 83, 69, 97,
38, 53, 50, 15, 80, 27, 92, 13, 15, 66, 2, 20, 71, 90, 52, 51, 14, 86, 85,
69, 51, 15, 81, 69, 31, 67, 91, 95, 32, 62, 46, 42, 98, 86, 74, 1, 24, 47,
65, 90, 16, 65, 94, 27, 73, 45, 80, 22, 18, 95, 75, 35, 31, 41, 84, 57,
35, 35, 86, 21, 47, 46, 73, 48, 48, 32, 65, 98, 44, 81, 79, 10, 43, 76,
64, 77, 74, 27, 91, 25, 68, 40, 77, 68, 22, 64, 63, 15, 57, 50, 33, 42,
80, 15, 62, 24, 16, 34, 92, 37, 95, 55, 80, 34, 29, 75, 83, 27, 47, 57,
55, 98, 45, 42, 32, 28, 15, 45, 79, 73, 98, 62, 58, 8, 3, 96, 13, 72, 64,
49, 77, 32, 86, 92, 5, 2, 26, 7, 6, 73, 23, 73, 79, 46, 4, 46, 9, 76, 1,
86, 60, 90, 40, 32, 40, 83, 29, 78, 1, 72, 66, 12, 13, 72, 31, 11, 31, 84,
41, 5, 63, 6, 75, 75, 57, 30, 8, 90, 69, 10, 79, 98, 21, 90, 65, 23, 52,
11, 27, 48, 62, 13, 80, 85, 53, 77, 45, 69, 90, 88, 27, 87, 95, 58, 69,
23, 57, 73, 54, 35, 12, 39, 96, 86, 68, 64, 30, 82, 21, 60, 20, 10, 54,
31, 66, 96, 17, 16, 85, 4, 35, 21, 98, 31, 55, 11, 12, 2, 5, 47, 19, 1,
76, 27, 60, 29, 46, 36, 90, 21, 62, 47, 64, 9, 65, 63, 70, 11, 64, 38, 57,
37, 96, 59, 40, 23, 77, 87, 89, 98, 37, 24, 31, 52, 38, 76, 54, 29, 85, 4,
31, 76, 9, 74, 50, 48, 4, 32, 76, 24, 19, 44, 51, 63, 34, 53, 80, 42, 27,
46, 33, 58, 27, 64, 84, 60, 90, 98, 46, 72, 25, 77, 59, 59, 6, 33, 29, 50,
7, 1, 71, 48, 31, 3, 47, 34, 54, 20, 55, 22, 20, 14, 70, 77, 47, 49, 66,
40, 25, 87, 36, 51, 3, 59, 80, 66, 89, 98, 61, 26, 22, 23, 22, 96, 419438]