summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2020-12-14 11:35:46 +0100
committerGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2020-12-14 11:35:46 +0100
commit9d38cb75c2e23a173adc7e390777c50361c31436 (patch)
tree361e34d71d1bac3cc57c5d5a3ec2ab3d4d42ae3c
parent2dae8ff6da421943e26af83866765a024c8f6650 (diff)
download2020-9d38cb75c2e23a173adc7e390777c50361c31436.tar.gz
2020-9d38cb75c2e23a173adc7e390777c50361c31436.tar.bz2
2020-9d38cb75c2e23a173adc7e390777c50361c31436.zip
Added day 8
-rw-r--r--day8/__init__.py75
-rw-r--r--day8/example.txt9
-rw-r--r--day8/input.txt624
3 files changed, 708 insertions, 0 deletions
diff --git a/day8/__init__.py b/day8/__init__.py
new file mode 100644
index 0000000..c6d086a
--- /dev/null
+++ b/day8/__init__.py
@@ -0,0 +1,75 @@
1from copy import copy
2from typing import Generator, Iterator, Any, List, Tuple
3
4from aoc import BaseAssignment
5
6
7class Assignment(BaseAssignment):
8 @staticmethod
9 def acc(line, accumulated_value, value):
10 return line + 1, accumulated_value + value
11
12 @staticmethod
13 def jmp(line, accumulated_value, value):
14 return line + value, accumulated_value
15
16 @staticmethod
17 def nop(line, accumulated_value, value):
18 return line + 1, accumulated_value
19
20 def read_input(self, example=False) -> List:
21 return list(super().read_input(example))
22
23 def parse_item(self, item: str) -> Tuple:
24 instruction, value = item.split(' ')
25
26 return getattr(self, instruction), int(value)
27
28 def run(self, input: List) -> int:
29 executed_lines = set()
30 accumulated_value = 0
31 line = 0
32
33 while True:
34 if line in executed_lines:
35 raise Exception(
36 f'Loop detected at line: {line}. '
37 f'Accumulated value: {accumulated_value}'
38 )
39
40 try:
41 instruction, value = input[line]
42 except IndexError:
43 break
44
45 executed_lines.add(line)
46 line, accumulated_value = instruction(
47 line, accumulated_value, value
48 )
49
50 return accumulated_value
51
52
53class AssignmentOne(Assignment):
54 pass
55
56
57class AssignmentTwo(Assignment):
58 def patch_instructions(self, input: List) -> Generator:
59 for index, (instruction, value) in enumerate(input):
60 if instruction is self.acc:
61 continue
62
63 patched_input = copy(input)
64 patched_input[index] = (
65 self.nop if instruction is self.jmp else self.jmp,
66 value
67 )
68 yield patched_input
69
70 def run(self, input: List) -> int:
71 for patched_input in self.patch_instructions(input):
72 try:
73 return super().run(patched_input)
74 except Exception:
75 continue
diff --git a/day8/example.txt b/day8/example.txt
new file mode 100644
index 0000000..6fee349
--- /dev/null
+++ b/day8/example.txt
@@ -0,0 +1,9 @@
1nop +0
2acc +1
3jmp +4
4acc +3
5jmp -3
6acc -99
7acc +1
8jmp -4
9acc +6 \ No newline at end of file
diff --git a/day8/input.txt b/day8/input.txt
new file mode 100644
index 0000000..340826c
--- /dev/null
+++ b/day8/input.txt
@@ -0,0 +1,624 @@
1acc -7
2acc +6
3acc +4
4nop +191
5jmp +199
6acc +44
7acc -9
8jmp +505
9acc -12
10acc +45
11jmp +204
12jmp +129
13acc +17
14nop +287
15jmp +584
16acc +16
17jmp +363
18acc +4
19nop +142
20acc +34
21nop +345
22jmp +522
23jmp +53
24acc -10
25jmp +524
26jmp +492
27jmp +319
28acc -9
29jmp +550
30acc -19
31jmp +15
32acc +24
33jmp +30
34acc -19
35acc +12
36acc -2
37jmp +274
38nop +91
39acc +10
40acc +4
41jmp +501
42acc +49
43acc +29
44jmp +488
45jmp +504
46jmp +277
47acc +20
48acc +34
49jmp -40
50acc +10
51acc -4
52acc -19
53acc +38
54jmp +239
55acc -16
56acc -3
57nop +513
58jmp +526
59jmp +131
60nop +539
61acc -11
62jmp +470
63acc +30
64jmp +166
65acc +17
66acc -16
67nop +315
68jmp +364
69acc +15
70nop -61
71acc -12
72nop +147
73jmp -31
74acc -9
75jmp +324
76acc +0
77jmp +1
78jmp +321
79acc +0
80acc +6
81acc -17
82acc +13
83jmp +461
84jmp +184
85acc +22
86jmp +182
87jmp +504
88nop +131
89acc +12
90acc -6
91acc +29
92jmp +187
93acc +17
94jmp +67
95jmp -2
96acc +50
97acc +17
98jmp +442
99acc +8
100nop +146
101acc -12
102acc +32
103jmp +237
104jmp +1
105acc +34
106acc +1
107acc +18
108jmp +274
109acc +17
110acc -12
111jmp +282
112acc +49
113acc +11
114acc +28
115acc +40
116jmp +79
117acc +19
118acc -8
119nop +87
120jmp +347
121acc +48
122nop +189
123jmp +419
124acc +31
125jmp +1
126acc +31
127jmp +1
128jmp -94
129nop -45
130nop +412
131acc -14
132acc +35
133jmp -49
134jmp +177
135jmp +127
136jmp +360
137jmp +114
138acc -11
139nop +248
140jmp -64
141acc +31
142acc +23
143acc +4
144nop +110
145jmp +61
146acc +45
147nop +444
148jmp +218
149jmp -131
150acc +36
151jmp -142
152nop +361
153acc -3
154acc +6
155jmp +161
156acc +24
157acc -7
158acc +4
159acc +31
160jmp +91
161jmp -20
162jmp +1
163nop -11
164jmp -146
165acc +25
166acc +33
167jmp +52
168acc -7
169jmp +82
170acc +7
171acc +21
172acc +6
173jmp +397
174acc +12
175acc +5
176acc -9
177acc +24
178jmp +371
179acc +50
180acc +47
181acc +19
182jmp +238
183jmp +396
184acc -16
185nop +394
186jmp +180
187acc +1
188acc +40
189jmp +237
190acc +22
191nop -30
192jmp -129
193acc +22
194jmp +232
195acc +23
196acc +27
197acc +47
198jmp +133
199acc +0
200nop +30
201acc +11
202acc -9
203jmp +381
204jmp +75
205jmp -64
206acc -15
207acc +29
208acc +49
209jmp +195
210nop +113
211acc -16
212nop +312
213acc +6
214jmp -44
215acc +26
216acc +40
217jmp +272
218jmp +83
219jmp +365
220acc +24
221acc +4
222jmp +29
223acc +8
224jmp -137
225acc +13
226jmp +1
227acc +33
228nop -182
229jmp +22
230jmp +9
231nop +20
232acc +14
233nop +291
234jmp -28
235jmp -83
236acc +18
237acc +5
238jmp +32
239acc +48
240nop -128
241acc +28
242jmp +225
243acc +29
244nop +280
245jmp +304
246acc +37
247acc +50
248acc +30
249jmp +131
250jmp -60
251acc +27
252jmp +272
253jmp +358
254acc -1
255acc +37
256jmp +203
257acc +1
258acc +37
259acc +12
260acc -16
261jmp +263
262acc -16
263acc +30
264jmp +86
265acc +26
266acc +6
267jmp +344
268jmp -147
269jmp -185
270acc -5
271acc -3
272acc +7
273acc +9
274jmp -205
275nop -85
276acc -4
277acc -1
278jmp +266
279acc +19
280nop -143
281acc -3
282jmp -12
283acc +12
284acc -18
285jmp +326
286acc +39
287jmp +165
288nop -279
289acc +19
290acc +46
291acc +5
292jmp -163
293acc -13
294jmp +1
295acc +33
296acc +44
297jmp -62
298acc -10
299acc +7
300jmp +240
301acc -19
302jmp -190
303acc -12
304jmp -167
305acc -2
306nop -288
307acc -13
308jmp +303
309acc +24
310jmp -283
311jmp +309
312nop +190
313acc +38
314acc -12
315jmp -47
316acc +15
317acc +31
318jmp -259
319nop +154
320acc +25
321acc +8
322jmp -295
323acc +37
324acc +34
325acc -18
326acc +41
327jmp +156
328acc +17
329acc +37
330jmp -243
331nop -318
332acc +45
333acc +33
334jmp +139
335acc -6
336acc +34
337acc +25
338acc +3
339jmp +260
340jmp +1
341acc +24
342jmp +154
343acc +34
344acc -19
345jmp +211
346acc +28
347jmp +98
348acc +45
349jmp -143
350acc +41
351acc +8
352acc +33
353nop +217
354jmp +119
355acc +21
356jmp -150
357acc +25
358acc +19
359jmp +1
360acc +20
361jmp +209
362acc +43
363acc +18
364acc +2
365jmp -159
366acc +25
367acc +20
368acc -4
369acc +45
370jmp +89
371nop +33
372acc +27
373jmp +190
374acc +47
375acc +36
376jmp +180
377acc +3
378jmp +1
379jmp -349
380jmp -6
381jmp -244
382acc +2
383acc +42
384jmp -357
385acc +3
386jmp -377
387acc +31
388nop -292
389acc +6
390acc +9
391jmp -212
392jmp -91
393acc +11
394jmp +119
395acc -18
396acc +38
397acc +31
398jmp -261
399jmp +1
400acc +2
401jmp -197
402acc +0
403jmp +1
404acc +40
405acc +31
406acc +4
407acc +45
408jmp -68
409acc -17
410acc +8
411nop -384
412jmp -193
413acc +22
414nop +170
415acc -19
416acc +34
417jmp -321
418acc +46
419jmp +130
420acc -19
421jmp +115
422acc -12
423acc +23
424acc +16
425jmp -94
426acc +11
427nop -286
428jmp -276
429acc +36
430acc +25
431jmp -32
432acc +6
433acc +39
434jmp +171
435acc -5
436nop -131
437jmp -368
438acc +41
439acc -7
440nop -336
441jmp -428
442acc +21
443acc +45
444jmp -225
445acc -2
446acc +14
447acc +29
448jmp -439
449acc +36
450acc +26
451jmp -433
452acc +29
453acc +36
454acc +31
455jmp -232
456nop -210
457nop -44
458jmp -382
459nop -119
460acc +43
461jmp +1
462jmp -24
463acc -13
464acc +22
465acc +16
466jmp +90
467nop -443
468acc +23
469acc +15
470acc -3
471jmp -225
472jmp -448
473acc +21
474acc -19
475acc +23
476jmp +1
477jmp -447
478acc +36
479acc -1
480acc +31
481nop +8
482jmp +97
483jmp -96
484acc -16
485acc +7
486acc -2
487jmp +1
488jmp -237
489jmp +1
490acc -12
491acc +29
492acc -1
493jmp -188
494acc +8
495jmp -453
496nop -234
497acc +46
498acc +20
499acc +24
500jmp -68
501jmp -178
502acc +42
503jmp -469
504acc +19
505acc +35
506jmp -4
507acc +49
508jmp +65
509nop +15
510nop -209
511acc +27
512jmp -261
513acc +15
514jmp -344
515acc +13
516acc +43
517jmp -194
518jmp +1
519jmp -335
520nop -424
521acc -13
522nop -387
523jmp -333
524acc +33
525acc +30
526jmp -272
527acc +16
528acc +5
529acc +21
530acc +41
531jmp -312
532acc +50
533jmp -429
534nop +57
535jmp -212
536acc +7
537acc -13
538jmp -252
539jmp -277
540jmp -114
541jmp -528
542jmp -40
543jmp -275
544acc +27
545nop -322
546jmp -356
547acc -11
548jmp -96
549nop -9
550acc -15
551jmp -194
552acc +9
553acc +47
554acc +44
555jmp -459
556acc -2
557acc -12
558nop -354
559jmp -166
560acc +44
561acc +23
562jmp -503
563acc +47
564acc +39
565acc +10
566acc +14
567jmp -543
568acc +43
569jmp -25
570jmp -52
571acc -19
572jmp -423
573acc +35
574acc +22
575acc +10
576acc +16
577jmp -527
578jmp -482
579acc +2
580acc +21
581acc -17
582jmp -417
583jmp -282
584acc +16
585nop -424
586nop -527
587jmp -207
588acc +23
589acc +21
590jmp -503
591acc +17
592acc -14
593jmp -189
594acc +43
595acc +14
596acc +11
597nop -427
598jmp -54
599acc +8
600nop -37
601nop -542
602jmp -332
603acc +27
604jmp +7
605jmp -98
606acc +50
607acc +0
608acc +48
609acc +0
610jmp -517
611acc +15
612acc +10
613jmp -478
614jmp -141
615acc +0
616acc +18
617jmp -468
618acc +49
619jmp -112
620nop -536
621acc -14
622acc -13
623acc +34
624jmp +1 \ No newline at end of file