Browse Source

Day 7

master
Chris Smith 8 years ago
parent
commit
6254332be5
2 changed files with 389 additions and 0 deletions
  1. 50
    0
      7.py
  2. 339
    0
      7.txt

+ 50
- 0
7.py View File

@@ -0,0 +1,50 @@
1
+#!/usr/bin/python
2
+
3
+import re
4
+
5
+wires = {}
6
+functions = {
7
+    'AND': lambda left, right: lambda: left() & right(),
8
+    'OR': lambda left, right: lambda: left() | right(),
9
+    'LSHIFT': lambda left, right: lambda: left() << right(),
10
+    'RSHIFT': lambda left, right: lambda: left() >> right(),
11
+    'NOT': lambda value: lambda: ~ value()
12
+}
13
+
14
+def get_wire(name):
15
+    if (name.isdigit()):
16
+        return int(name)
17
+
18
+    if hasattr(wires[name], '__call__'):
19
+        wires[name] = wires[name]()
20
+
21
+    return wires[name]
22
+
23
+def handle_input(text):
24
+    binary_match = re.match('^(.*?) (AND|OR|LSHIFT|RSHIFT) (.*?)$', text)
25
+    if binary_match:
26
+        (left, operator, right) = binary_match.group(1, 2, 3)
27
+        return functions[operator](lambda: get_wire(left), lambda: get_wire(right))
28
+
29
+    unary_match = re.match('^(NOT) (.*?)$', text)
30
+    if unary_match:
31
+        (operator, value) = unary_match.group(1, 2)
32
+        return functions[operator](lambda: get_wire(value))
33
+
34
+    return lambda: get_wire(text)
35
+
36
+def initialise():
37
+    with open('7.txt', 'r') as file:
38
+        input = file.read()
39
+
40
+    for line in input.splitlines():
41
+        (input, output) = line.split(' -> ')
42
+        wires[output] = handle_input(input)
43
+
44
+initialise()
45
+part_1 = wires['a']()
46
+print('Part 1: %s' % part_1)
47
+
48
+initialise()
49
+wires['b'] = part_1
50
+print('Part 2: %s' % wires['a']())

+ 339
- 0
7.txt View File

@@ -0,0 +1,339 @@
1
+NOT dq -> dr
2
+kg OR kf -> kh
3
+ep OR eo -> eq
4
+44430 -> b
5
+NOT gs -> gt
6
+dd OR do -> dp
7
+eg AND ei -> ej
8
+y AND ae -> ag
9
+jx AND jz -> ka
10
+lf RSHIFT 2 -> lg
11
+z AND aa -> ac
12
+dy AND ej -> el
13
+bj OR bi -> bk
14
+kk RSHIFT 3 -> km
15
+NOT cn -> co
16
+gn AND gp -> gq
17
+cq AND cs -> ct
18
+eo LSHIFT 15 -> es
19
+lg OR lm -> ln
20
+dy OR ej -> ek
21
+NOT di -> dj
22
+1 AND fi -> fj
23
+kf LSHIFT 15 -> kj
24
+NOT jy -> jz
25
+NOT ft -> fu
26
+fs AND fu -> fv
27
+NOT hr -> hs
28
+ck OR cl -> cm
29
+jp RSHIFT 5 -> js
30
+iv OR jb -> jc
31
+is OR it -> iu
32
+ld OR le -> lf
33
+NOT fc -> fd
34
+NOT dm -> dn
35
+bn OR by -> bz
36
+aj AND al -> am
37
+cd LSHIFT 15 -> ch
38
+jp AND ka -> kc
39
+ci OR ct -> cu
40
+gv AND gx -> gy
41
+de AND dk -> dm
42
+x RSHIFT 5 -> aa
43
+et RSHIFT 2 -> eu
44
+x RSHIFT 1 -> aq
45
+ia OR ig -> ih
46
+bk LSHIFT 1 -> ce
47
+y OR ae -> af
48
+NOT ca -> cb
49
+e AND f -> h
50
+ia AND ig -> ii
51
+ck AND cl -> cn
52
+NOT jh -> ji
53
+z OR aa -> ab
54
+1 AND en -> eo
55
+ib AND ic -> ie
56
+NOT eh -> ei
57
+iy AND ja -> jb
58
+NOT bb -> bc
59
+ha OR gz -> hb
60
+1 AND cx -> cy
61
+NOT ax -> ay
62
+ev OR ew -> ex
63
+bn RSHIFT 2 -> bo
64
+er OR es -> et
65
+eu OR fa -> fb
66
+jp OR ka -> kb
67
+ea AND eb -> ed
68
+k AND m -> n
69
+et RSHIFT 3 -> ev
70
+et RSHIFT 5 -> ew
71
+hz RSHIFT 1 -> is
72
+ki OR kj -> kk
73
+NOT h -> i
74
+lv LSHIFT 15 -> lz
75
+as RSHIFT 1 -> bl
76
+hu LSHIFT 15 -> hy
77
+iw AND ix -> iz
78
+lf RSHIFT 1 -> ly
79
+fp OR fv -> fw
80
+1 AND am -> an
81
+ap LSHIFT 1 -> bj
82
+u LSHIFT 1 -> ao
83
+b RSHIFT 5 -> f
84
+jq AND jw -> jy
85
+iu RSHIFT 3 -> iw
86
+ih AND ij -> ik
87
+NOT iz -> ja
88
+de OR dk -> dl
89
+iu OR jf -> jg
90
+as AND bd -> bf
91
+b RSHIFT 3 -> e
92
+jq OR jw -> jx
93
+iv AND jb -> jd
94
+cg OR ch -> ci
95
+iu AND jf -> jh
96
+lx -> a
97
+1 AND cc -> cd
98
+ly OR lz -> ma
99
+NOT el -> em
100
+1 AND bh -> bi
101
+fb AND fd -> fe
102
+lf OR lq -> lr
103
+bn RSHIFT 3 -> bp
104
+bn AND by -> ca
105
+af AND ah -> ai
106
+cf LSHIFT 1 -> cz
107
+dw OR dx -> dy
108
+gj AND gu -> gw
109
+jg AND ji -> jj
110
+jr OR js -> jt
111
+bl OR bm -> bn
112
+gj RSHIFT 2 -> gk
113
+cj OR cp -> cq
114
+gj OR gu -> gv
115
+b OR n -> o
116
+o AND q -> r
117
+bi LSHIFT 15 -> bm
118
+dy RSHIFT 1 -> er
119
+cu AND cw -> cx
120
+iw OR ix -> iy
121
+hc OR hd -> he
122
+0 -> c
123
+db OR dc -> dd
124
+kk RSHIFT 2 -> kl
125
+eq LSHIFT 1 -> fk
126
+dz OR ef -> eg
127
+NOT ed -> ee
128
+lw OR lv -> lx
129
+fw AND fy -> fz
130
+dz AND ef -> eh
131
+jp RSHIFT 3 -> jr
132
+lg AND lm -> lo
133
+ci RSHIFT 2 -> cj
134
+be AND bg -> bh
135
+lc LSHIFT 1 -> lw
136
+hm AND ho -> hp
137
+jr AND js -> ju
138
+1 AND io -> ip
139
+cm AND co -> cp
140
+ib OR ic -> id
141
+NOT bf -> bg
142
+fo RSHIFT 5 -> fr
143
+ip LSHIFT 15 -> it
144
+jt AND jv -> jw
145
+jc AND je -> jf
146
+du OR dt -> dv
147
+NOT fx -> fy
148
+aw AND ay -> az
149
+ge LSHIFT 15 -> gi
150
+NOT ak -> al
151
+fm OR fn -> fo
152
+ff AND fh -> fi
153
+ci RSHIFT 5 -> cl
154
+cz OR cy -> da
155
+NOT ey -> ez
156
+NOT ju -> jv
157
+NOT ls -> lt
158
+kk AND kv -> kx
159
+NOT ii -> ij
160
+kl AND kr -> kt
161
+jk LSHIFT 15 -> jo
162
+e OR f -> g
163
+NOT bs -> bt
164
+hi AND hk -> hl
165
+hz OR ik -> il
166
+ek AND em -> en
167
+ao OR an -> ap
168
+dv LSHIFT 1 -> ep
169
+an LSHIFT 15 -> ar
170
+fo RSHIFT 1 -> gh
171
+NOT im -> in
172
+kk RSHIFT 1 -> ld
173
+hw LSHIFT 1 -> iq
174
+ec AND ee -> ef
175
+hb LSHIFT 1 -> hv
176
+kb AND kd -> ke
177
+x AND ai -> ak
178
+dd AND do -> dq
179
+aq OR ar -> as
180
+iq OR ip -> ir
181
+dl AND dn -> do
182
+iu RSHIFT 5 -> ix
183
+as OR bd -> be
184
+NOT go -> gp
185
+fk OR fj -> fl
186
+jm LSHIFT 1 -> kg
187
+NOT cv -> cw
188
+dp AND dr -> ds
189
+dt LSHIFT 15 -> dx
190
+et RSHIFT 1 -> fm
191
+dy RSHIFT 3 -> ea
192
+fp AND fv -> fx
193
+NOT p -> q
194
+dd RSHIFT 2 -> de
195
+eu AND fa -> fc
196
+ba AND bc -> bd
197
+dh AND dj -> dk
198
+lr AND lt -> lu
199
+he RSHIFT 1 -> hx
200
+ex AND ez -> fa
201
+df OR dg -> dh
202
+fj LSHIFT 15 -> fn
203
+NOT kx -> ky
204
+gk OR gq -> gr
205
+dy RSHIFT 2 -> dz
206
+gh OR gi -> gj
207
+lj AND ll -> lm
208
+x OR ai -> aj
209
+bz AND cb -> cc
210
+1 AND lu -> lv
211
+as RSHIFT 3 -> au
212
+ce OR cd -> cf
213
+il AND in -> io
214
+dd RSHIFT 1 -> dw
215
+NOT lo -> lp
216
+c LSHIFT 1 -> t
217
+dd RSHIFT 3 -> df
218
+dd RSHIFT 5 -> dg
219
+lh AND li -> lk
220
+lf RSHIFT 5 -> li
221
+dy RSHIFT 5 -> eb
222
+NOT kt -> ku
223
+at OR az -> ba
224
+x RSHIFT 3 -> z
225
+NOT lk -> ll
226
+lb OR la -> lc
227
+1 AND r -> s
228
+lh OR li -> lj
229
+ln AND lp -> lq
230
+kk RSHIFT 5 -> kn
231
+ea OR eb -> ec
232
+ci AND ct -> cv
233
+b RSHIFT 2 -> d
234
+jp RSHIFT 1 -> ki
235
+NOT cr -> cs
236
+NOT jd -> je
237
+jp RSHIFT 2 -> jq
238
+jn OR jo -> jp
239
+lf RSHIFT 3 -> lh
240
+1 AND ds -> dt
241
+lf AND lq -> ls
242
+la LSHIFT 15 -> le
243
+NOT fg -> fh
244
+at AND az -> bb
245
+au AND av -> ax
246
+kw AND ky -> kz
247
+v OR w -> x
248
+kk OR kv -> kw
249
+ks AND ku -> kv
250
+kh LSHIFT 1 -> lb
251
+1 AND kz -> la
252
+NOT kc -> kd
253
+x RSHIFT 2 -> y
254
+et OR fe -> ff
255
+et AND fe -> fg
256
+NOT ac -> ad
257
+jl OR jk -> jm
258
+1 AND jj -> jk
259
+bn RSHIFT 1 -> cg
260
+NOT kp -> kq
261
+ci RSHIFT 3 -> ck
262
+ev AND ew -> ey
263
+1 AND ke -> kf
264
+cj AND cp -> cr
265
+ir LSHIFT 1 -> jl
266
+NOT gw -> gx
267
+as RSHIFT 2 -> at
268
+iu RSHIFT 1 -> jn
269
+cy LSHIFT 15 -> dc
270
+hg OR hh -> hi
271
+ci RSHIFT 1 -> db
272
+au OR av -> aw
273
+km AND kn -> kp
274
+gj RSHIFT 1 -> hc
275
+iu RSHIFT 2 -> iv
276
+ab AND ad -> ae
277
+da LSHIFT 1 -> du
278
+NOT bw -> bx
279
+km OR kn -> ko
280
+ko AND kq -> kr
281
+bv AND bx -> by
282
+kl OR kr -> ks
283
+1 AND ht -> hu
284
+df AND dg -> di
285
+NOT ag -> ah
286
+d OR j -> k
287
+d AND j -> l
288
+b AND n -> p
289
+gf OR ge -> gg
290
+gg LSHIFT 1 -> ha
291
+bn RSHIFT 5 -> bq
292
+bo OR bu -> bv
293
+1 AND gy -> gz
294
+s LSHIFT 15 -> w
295
+NOT ie -> if
296
+as RSHIFT 5 -> av
297
+bo AND bu -> bw
298
+hz AND ik -> im
299
+bp AND bq -> bs
300
+b RSHIFT 1 -> v
301
+NOT l -> m
302
+bp OR bq -> br
303
+g AND i -> j
304
+br AND bt -> bu
305
+t OR s -> u
306
+hz RSHIFT 5 -> ic
307
+gk AND gq -> gs
308
+fl LSHIFT 1 -> gf
309
+he RSHIFT 3 -> hg
310
+gz LSHIFT 15 -> hd
311
+hf OR hl -> hm
312
+1 AND gd -> ge
313
+fo OR fz -> ga
314
+id AND if -> ig
315
+fo AND fz -> gb
316
+gr AND gt -> gu
317
+he OR hp -> hq
318
+fq AND fr -> ft
319
+ga AND gc -> gd
320
+fo RSHIFT 2 -> fp
321
+gl OR gm -> gn
322
+hg AND hh -> hj
323
+NOT hn -> ho
324
+gl AND gm -> go
325
+he RSHIFT 5 -> hh
326
+NOT gb -> gc
327
+hq AND hs -> ht
328
+hz RSHIFT 3 -> ib
329
+hz RSHIFT 2 -> ia
330
+fq OR fr -> fs
331
+hx OR hy -> hz
332
+he AND hp -> hr
333
+gj RSHIFT 5 -> gm
334
+hf AND hl -> hn
335
+hv OR hu -> hw
336
+NOT hj -> hk
337
+gj RSHIFT 3 -> gl
338
+fo RSHIFT 3 -> fq
339
+he RSHIFT 2 -> hf

Loading…
Cancel
Save