mirror of
https://github.com/cupcakearmy/advent-of-code.git
synced 2024-10-05 21:15:07 +02:00
8
This commit is contained in:
parent
05708afad8
commit
26ad865000
15
solutions/8/README.md
Normal file
15
solutions/8/README.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# 8
|
||||||
|
|
||||||
|
Keep getting better! Today we write a little state machine, love it.
|
||||||
|
|
||||||
|
So firstly we remember what `oc` (Operation Counter) we have already visited and if so we simply stop and return the accumulator.
|
||||||
|
|
||||||
|
For I basically run the code many times, inverting `nop` to `jmp` and vice versa until i found a working instruction set.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Solutions</summary>
|
||||||
|
<ol>
|
||||||
|
<li>1087</li>
|
||||||
|
<li>780</li>
|
||||||
|
</ol>
|
||||||
|
</details>
|
613
solutions/8/data.txt
Normal file
613
solutions/8/data.txt
Normal file
@ -0,0 +1,613 @@
|
|||||||
|
nop +456
|
||||||
|
nop +38
|
||||||
|
acc +9
|
||||||
|
jmp +153
|
||||||
|
acc +15
|
||||||
|
nop +560
|
||||||
|
jmp +452
|
||||||
|
acc +26
|
||||||
|
acc +42
|
||||||
|
jmp +376
|
||||||
|
acc -5
|
||||||
|
acc +12
|
||||||
|
acc -5
|
||||||
|
jmp +15
|
||||||
|
jmp +1
|
||||||
|
acc -9
|
||||||
|
jmp +533
|
||||||
|
acc +19
|
||||||
|
acc +33
|
||||||
|
acc +34
|
||||||
|
jmp -6
|
||||||
|
nop +404
|
||||||
|
nop +140
|
||||||
|
acc +0
|
||||||
|
jmp +123
|
||||||
|
acc +45
|
||||||
|
acc +0
|
||||||
|
jmp +496
|
||||||
|
jmp +487
|
||||||
|
acc +9
|
||||||
|
acc +34
|
||||||
|
jmp +484
|
||||||
|
acc +0
|
||||||
|
acc -14
|
||||||
|
jmp +466
|
||||||
|
acc +40
|
||||||
|
acc +6
|
||||||
|
acc +30
|
||||||
|
jmp +444
|
||||||
|
nop +386
|
||||||
|
jmp +215
|
||||||
|
acc +43
|
||||||
|
acc +5
|
||||||
|
nop -4
|
||||||
|
jmp +535
|
||||||
|
jmp -13
|
||||||
|
acc +3
|
||||||
|
acc +7
|
||||||
|
acc +49
|
||||||
|
acc -1
|
||||||
|
jmp +245
|
||||||
|
acc +9
|
||||||
|
acc +31
|
||||||
|
nop +142
|
||||||
|
jmp +554
|
||||||
|
acc +3
|
||||||
|
jmp +493
|
||||||
|
nop +399
|
||||||
|
jmp +232
|
||||||
|
acc -16
|
||||||
|
acc +33
|
||||||
|
jmp +410
|
||||||
|
acc +33
|
||||||
|
acc +5
|
||||||
|
acc -17
|
||||||
|
jmp +272
|
||||||
|
acc -3
|
||||||
|
acc +37
|
||||||
|
jmp +181
|
||||||
|
jmp -12
|
||||||
|
nop +344
|
||||||
|
acc +5
|
||||||
|
acc -16
|
||||||
|
jmp +290
|
||||||
|
nop +530
|
||||||
|
acc +15
|
||||||
|
acc +3
|
||||||
|
jmp +343
|
||||||
|
acc +2
|
||||||
|
acc +19
|
||||||
|
jmp +298
|
||||||
|
acc +43
|
||||||
|
acc +25
|
||||||
|
acc -19
|
||||||
|
jmp +439
|
||||||
|
acc +43
|
||||||
|
acc +45
|
||||||
|
acc +20
|
||||||
|
jmp +355
|
||||||
|
acc +13
|
||||||
|
acc +24
|
||||||
|
acc -15
|
||||||
|
nop +396
|
||||||
|
jmp +215
|
||||||
|
acc -7
|
||||||
|
acc +17
|
||||||
|
jmp +441
|
||||||
|
acc -8
|
||||||
|
acc -19
|
||||||
|
jmp +505
|
||||||
|
jmp +282
|
||||||
|
acc -17
|
||||||
|
acc -8
|
||||||
|
acc +20
|
||||||
|
jmp +359
|
||||||
|
acc +26
|
||||||
|
acc +14
|
||||||
|
acc +47
|
||||||
|
acc +3
|
||||||
|
jmp +298
|
||||||
|
acc +31
|
||||||
|
nop +205
|
||||||
|
acc +0
|
||||||
|
acc +7
|
||||||
|
jmp +389
|
||||||
|
acc -5
|
||||||
|
acc +47
|
||||||
|
jmp +94
|
||||||
|
acc -13
|
||||||
|
jmp +358
|
||||||
|
acc -13
|
||||||
|
jmp +134
|
||||||
|
acc +8
|
||||||
|
acc -19
|
||||||
|
jmp +312
|
||||||
|
acc +43
|
||||||
|
acc +17
|
||||||
|
jmp +97
|
||||||
|
jmp +48
|
||||||
|
nop +253
|
||||||
|
acc +48
|
||||||
|
acc -7
|
||||||
|
acc -2
|
||||||
|
jmp +23
|
||||||
|
acc +26
|
||||||
|
acc +14
|
||||||
|
acc -14
|
||||||
|
acc +17
|
||||||
|
jmp +18
|
||||||
|
acc +14
|
||||||
|
acc +8
|
||||||
|
jmp +341
|
||||||
|
acc +35
|
||||||
|
jmp +227
|
||||||
|
acc +15
|
||||||
|
acc -7
|
||||||
|
jmp -95
|
||||||
|
acc -19
|
||||||
|
jmp -59
|
||||||
|
jmp -31
|
||||||
|
acc -6
|
||||||
|
acc -4
|
||||||
|
acc +24
|
||||||
|
jmp +84
|
||||||
|
acc -15
|
||||||
|
jmp +82
|
||||||
|
nop +74
|
||||||
|
acc +8
|
||||||
|
acc +9
|
||||||
|
acc +13
|
||||||
|
jmp +194
|
||||||
|
jmp +376
|
||||||
|
acc +34
|
||||||
|
nop -16
|
||||||
|
jmp -90
|
||||||
|
acc +4
|
||||||
|
acc +43
|
||||||
|
nop +215
|
||||||
|
jmp -147
|
||||||
|
acc +0
|
||||||
|
acc +11
|
||||||
|
acc -15
|
||||||
|
acc +23
|
||||||
|
jmp +130
|
||||||
|
acc +40
|
||||||
|
jmp +106
|
||||||
|
acc -4
|
||||||
|
acc -18
|
||||||
|
acc +18
|
||||||
|
nop +329
|
||||||
|
jmp +230
|
||||||
|
acc +19
|
||||||
|
nop +172
|
||||||
|
acc +43
|
||||||
|
jmp +304
|
||||||
|
acc +44
|
||||||
|
nop +213
|
||||||
|
nop +195
|
||||||
|
acc +6
|
||||||
|
jmp -79
|
||||||
|
acc +41
|
||||||
|
acc -11
|
||||||
|
acc +18
|
||||||
|
acc -9
|
||||||
|
jmp -25
|
||||||
|
acc +27
|
||||||
|
acc -6
|
||||||
|
acc +31
|
||||||
|
jmp -56
|
||||||
|
acc +5
|
||||||
|
acc +12
|
||||||
|
acc +32
|
||||||
|
acc +34
|
||||||
|
jmp -189
|
||||||
|
acc +32
|
||||||
|
acc +5
|
||||||
|
acc -16
|
||||||
|
jmp +301
|
||||||
|
nop +108
|
||||||
|
nop -108
|
||||||
|
jmp -141
|
||||||
|
acc -12
|
||||||
|
jmp +273
|
||||||
|
acc +3
|
||||||
|
jmp +140
|
||||||
|
acc +7
|
||||||
|
acc -11
|
||||||
|
acc -17
|
||||||
|
nop +194
|
||||||
|
jmp -122
|
||||||
|
acc -14
|
||||||
|
nop +186
|
||||||
|
acc +24
|
||||||
|
jmp +277
|
||||||
|
nop +341
|
||||||
|
acc +18
|
||||||
|
jmp -64
|
||||||
|
acc +45
|
||||||
|
acc +42
|
||||||
|
jmp +52
|
||||||
|
acc +39
|
||||||
|
nop +91
|
||||||
|
nop -8
|
||||||
|
jmp +217
|
||||||
|
acc +44
|
||||||
|
acc +15
|
||||||
|
jmp +72
|
||||||
|
acc +24
|
||||||
|
jmp -231
|
||||||
|
acc -16
|
||||||
|
nop +55
|
||||||
|
nop +262
|
||||||
|
acc +40
|
||||||
|
jmp +234
|
||||||
|
jmp -14
|
||||||
|
acc +31
|
||||||
|
nop -177
|
||||||
|
acc +40
|
||||||
|
jmp +343
|
||||||
|
acc -8
|
||||||
|
jmp -169
|
||||||
|
acc +30
|
||||||
|
acc +12
|
||||||
|
acc -11
|
||||||
|
jmp +41
|
||||||
|
acc +9
|
||||||
|
acc -9
|
||||||
|
jmp +65
|
||||||
|
acc +38
|
||||||
|
acc +14
|
||||||
|
jmp +335
|
||||||
|
acc -19
|
||||||
|
acc +38
|
||||||
|
acc +16
|
||||||
|
acc -11
|
||||||
|
jmp +230
|
||||||
|
jmp -71
|
||||||
|
acc +48
|
||||||
|
acc -13
|
||||||
|
nop -255
|
||||||
|
jmp +1
|
||||||
|
jmp -220
|
||||||
|
acc +2
|
||||||
|
jmp +157
|
||||||
|
jmp -105
|
||||||
|
acc -16
|
||||||
|
acc -5
|
||||||
|
jmp -196
|
||||||
|
acc +30
|
||||||
|
jmp +139
|
||||||
|
jmp +83
|
||||||
|
acc -3
|
||||||
|
acc -12
|
||||||
|
jmp +254
|
||||||
|
jmp -60
|
||||||
|
acc +33
|
||||||
|
jmp -37
|
||||||
|
acc +17
|
||||||
|
acc -14
|
||||||
|
jmp +93
|
||||||
|
nop +178
|
||||||
|
acc +38
|
||||||
|
acc +47
|
||||||
|
jmp -89
|
||||||
|
jmp +271
|
||||||
|
acc +43
|
||||||
|
acc +32
|
||||||
|
jmp -240
|
||||||
|
acc +26
|
||||||
|
acc +32
|
||||||
|
acc +30
|
||||||
|
nop +284
|
||||||
|
jmp +169
|
||||||
|
acc -7
|
||||||
|
acc +37
|
||||||
|
jmp +102
|
||||||
|
acc +4
|
||||||
|
jmp +86
|
||||||
|
jmp -123
|
||||||
|
acc +0
|
||||||
|
acc -14
|
||||||
|
acc +18
|
||||||
|
jmp +1
|
||||||
|
jmp -5
|
||||||
|
jmp -36
|
||||||
|
jmp +148
|
||||||
|
acc -17
|
||||||
|
acc -14
|
||||||
|
acc +28
|
||||||
|
acc +15
|
||||||
|
jmp +79
|
||||||
|
jmp -289
|
||||||
|
acc +42
|
||||||
|
acc -5
|
||||||
|
acc +13
|
||||||
|
jmp +240
|
||||||
|
acc -10
|
||||||
|
acc -18
|
||||||
|
acc -16
|
||||||
|
jmp +103
|
||||||
|
acc +21
|
||||||
|
jmp +32
|
||||||
|
nop +118
|
||||||
|
acc +22
|
||||||
|
acc -16
|
||||||
|
acc +15
|
||||||
|
jmp -186
|
||||||
|
acc -2
|
||||||
|
acc -14
|
||||||
|
acc +22
|
||||||
|
acc +16
|
||||||
|
jmp +73
|
||||||
|
acc -6
|
||||||
|
jmp -225
|
||||||
|
acc -18
|
||||||
|
nop +113
|
||||||
|
acc +50
|
||||||
|
acc -6
|
||||||
|
jmp +181
|
||||||
|
acc +41
|
||||||
|
jmp +1
|
||||||
|
nop +92
|
||||||
|
acc +23
|
||||||
|
jmp +190
|
||||||
|
acc +39
|
||||||
|
acc +0
|
||||||
|
acc +33
|
||||||
|
jmp +111
|
||||||
|
nop -63
|
||||||
|
nop -81
|
||||||
|
acc +9
|
||||||
|
acc +35
|
||||||
|
jmp +50
|
||||||
|
acc +11
|
||||||
|
jmp -295
|
||||||
|
nop +230
|
||||||
|
acc +34
|
||||||
|
acc +12
|
||||||
|
acc +47
|
||||||
|
jmp +126
|
||||||
|
acc +0
|
||||||
|
nop -1
|
||||||
|
acc +19
|
||||||
|
acc -16
|
||||||
|
jmp -360
|
||||||
|
acc +29
|
||||||
|
acc -2
|
||||||
|
jmp -110
|
||||||
|
acc +2
|
||||||
|
acc +50
|
||||||
|
jmp -36
|
||||||
|
jmp -107
|
||||||
|
jmp +178
|
||||||
|
acc -11
|
||||||
|
jmp +181
|
||||||
|
nop +115
|
||||||
|
nop +186
|
||||||
|
jmp +95
|
||||||
|
jmp +1
|
||||||
|
nop +148
|
||||||
|
acc +2
|
||||||
|
acc +49
|
||||||
|
jmp +173
|
||||||
|
acc +38
|
||||||
|
jmp +178
|
||||||
|
acc +28
|
||||||
|
acc +6
|
||||||
|
acc +15
|
||||||
|
jmp +110
|
||||||
|
acc +49
|
||||||
|
nop +100
|
||||||
|
jmp +57
|
||||||
|
acc +45
|
||||||
|
nop +65
|
||||||
|
acc +43
|
||||||
|
acc +12
|
||||||
|
jmp -272
|
||||||
|
jmp -260
|
||||||
|
nop +100
|
||||||
|
jmp -224
|
||||||
|
jmp +142
|
||||||
|
jmp +52
|
||||||
|
jmp -34
|
||||||
|
jmp -110
|
||||||
|
acc +35
|
||||||
|
nop -112
|
||||||
|
jmp +16
|
||||||
|
jmp -18
|
||||||
|
jmp -157
|
||||||
|
jmp +81
|
||||||
|
acc +1
|
||||||
|
jmp -107
|
||||||
|
acc +16
|
||||||
|
acc +23
|
||||||
|
jmp -255
|
||||||
|
acc +22
|
||||||
|
jmp +42
|
||||||
|
nop +168
|
||||||
|
acc +41
|
||||||
|
jmp -311
|
||||||
|
jmp -163
|
||||||
|
jmp +118
|
||||||
|
nop +4
|
||||||
|
acc +18
|
||||||
|
jmp +54
|
||||||
|
jmp -414
|
||||||
|
nop -181
|
||||||
|
acc +10
|
||||||
|
acc +23
|
||||||
|
jmp -321
|
||||||
|
nop -322
|
||||||
|
acc -9
|
||||||
|
jmp +101
|
||||||
|
nop -7
|
||||||
|
acc +35
|
||||||
|
acc +46
|
||||||
|
jmp -312
|
||||||
|
nop +64
|
||||||
|
nop -386
|
||||||
|
jmp -280
|
||||||
|
acc +16
|
||||||
|
jmp -156
|
||||||
|
acc +13
|
||||||
|
nop -131
|
||||||
|
jmp +1
|
||||||
|
jmp -416
|
||||||
|
jmp +15
|
||||||
|
jmp -94
|
||||||
|
jmp -330
|
||||||
|
nop +93
|
||||||
|
nop -205
|
||||||
|
acc +48
|
||||||
|
jmp -19
|
||||||
|
jmp -70
|
||||||
|
nop +21
|
||||||
|
acc -5
|
||||||
|
acc +19
|
||||||
|
jmp +62
|
||||||
|
acc +22
|
||||||
|
jmp -448
|
||||||
|
jmp -77
|
||||||
|
acc +26
|
||||||
|
acc -2
|
||||||
|
jmp +70
|
||||||
|
acc -2
|
||||||
|
acc +21
|
||||||
|
jmp -195
|
||||||
|
nop -114
|
||||||
|
jmp +107
|
||||||
|
acc +37
|
||||||
|
acc +6
|
||||||
|
jmp -436
|
||||||
|
acc +48
|
||||||
|
jmp +96
|
||||||
|
jmp -121
|
||||||
|
acc +0
|
||||||
|
jmp -74
|
||||||
|
jmp +1
|
||||||
|
acc +27
|
||||||
|
acc +2
|
||||||
|
jmp -279
|
||||||
|
acc +7
|
||||||
|
acc +0
|
||||||
|
jmp +1
|
||||||
|
jmp -413
|
||||||
|
acc +6
|
||||||
|
jmp -180
|
||||||
|
acc +18
|
||||||
|
acc +10
|
||||||
|
jmp -437
|
||||||
|
jmp -338
|
||||||
|
nop -456
|
||||||
|
jmp -463
|
||||||
|
acc +1
|
||||||
|
nop -54
|
||||||
|
jmp -168
|
||||||
|
acc +27
|
||||||
|
jmp -479
|
||||||
|
acc +42
|
||||||
|
jmp -408
|
||||||
|
jmp +85
|
||||||
|
acc -16
|
||||||
|
acc +24
|
||||||
|
jmp -391
|
||||||
|
jmp -206
|
||||||
|
nop +8
|
||||||
|
jmp +1
|
||||||
|
acc +38
|
||||||
|
nop -473
|
||||||
|
jmp -94
|
||||||
|
acc +10
|
||||||
|
acc -14
|
||||||
|
jmp -425
|
||||||
|
acc +17
|
||||||
|
nop -208
|
||||||
|
acc +39
|
||||||
|
jmp -265
|
||||||
|
acc +3
|
||||||
|
jmp -284
|
||||||
|
acc +19
|
||||||
|
acc +5
|
||||||
|
nop -111
|
||||||
|
acc +22
|
||||||
|
jmp -309
|
||||||
|
acc +12
|
||||||
|
acc +39
|
||||||
|
jmp -151
|
||||||
|
acc +33
|
||||||
|
acc -14
|
||||||
|
jmp -450
|
||||||
|
acc +16
|
||||||
|
nop +50
|
||||||
|
jmp -188
|
||||||
|
acc -13
|
||||||
|
acc +15
|
||||||
|
acc +4
|
||||||
|
jmp -484
|
||||||
|
acc +27
|
||||||
|
jmp -98
|
||||||
|
acc +34
|
||||||
|
jmp -120
|
||||||
|
jmp -537
|
||||||
|
acc +43
|
||||||
|
acc -8
|
||||||
|
acc -6
|
||||||
|
jmp -405
|
||||||
|
acc -8
|
||||||
|
nop -179
|
||||||
|
acc -11
|
||||||
|
jmp -264
|
||||||
|
acc +24
|
||||||
|
jmp -280
|
||||||
|
acc -6
|
||||||
|
acc +1
|
||||||
|
jmp -353
|
||||||
|
acc -18
|
||||||
|
jmp -58
|
||||||
|
acc +1
|
||||||
|
acc -7
|
||||||
|
acc -2
|
||||||
|
acc +44
|
||||||
|
jmp -115
|
||||||
|
nop -328
|
||||||
|
acc +27
|
||||||
|
acc +2
|
||||||
|
jmp +20
|
||||||
|
acc +14
|
||||||
|
acc +34
|
||||||
|
jmp -460
|
||||||
|
nop -445
|
||||||
|
acc -9
|
||||||
|
acc +24
|
||||||
|
acc -11
|
||||||
|
jmp -72
|
||||||
|
jmp -434
|
||||||
|
jmp -370
|
||||||
|
acc +35
|
||||||
|
acc +43
|
||||||
|
acc +45
|
||||||
|
acc +44
|
||||||
|
jmp -287
|
||||||
|
jmp -546
|
||||||
|
nop -474
|
||||||
|
acc -6
|
||||||
|
jmp -357
|
||||||
|
nop -163
|
||||||
|
nop -218
|
||||||
|
nop -342
|
||||||
|
jmp -570
|
||||||
|
acc +44
|
||||||
|
acc +4
|
||||||
|
acc +35
|
||||||
|
acc +6
|
||||||
|
jmp -541
|
||||||
|
jmp -274
|
||||||
|
acc +48
|
||||||
|
acc -18
|
||||||
|
jmp -171
|
||||||
|
acc -13
|
||||||
|
acc -14
|
||||||
|
acc +25
|
||||||
|
acc +26
|
||||||
|
jmp +1
|
63
solutions/8/python/main.py
Normal file
63
solutions/8/python/main.py
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
from os.path import join, dirname
|
||||||
|
from typing import List, Optional, Set, Tuple
|
||||||
|
|
||||||
|
Instructions = List[Tuple[str, int]]
|
||||||
|
|
||||||
|
|
||||||
|
class VM:
|
||||||
|
def __init__(self, code: str) -> None:
|
||||||
|
instructionsRaw = code.strip().split('\n')
|
||||||
|
self.acc = 0
|
||||||
|
self.oc = 0
|
||||||
|
self.invert: Optional[int] = None
|
||||||
|
self.instructions: Instructions = []
|
||||||
|
for instruction in instructionsRaw:
|
||||||
|
op, value = instruction.split(' ')
|
||||||
|
self.instructions.append((op, int(value)))
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
self.acc = 0
|
||||||
|
self.oc = 0
|
||||||
|
|
||||||
|
def exec(self):
|
||||||
|
op, value = self.instructions[self.oc]
|
||||||
|
if self.oc == self.invert:
|
||||||
|
op = 'jmp' if op == 'nop' else 'nop'
|
||||||
|
if op == 'nop':
|
||||||
|
self.oc += 1
|
||||||
|
elif op == 'acc':
|
||||||
|
self.acc += value
|
||||||
|
self.oc += 1
|
||||||
|
elif op == 'jmp':
|
||||||
|
self.oc += value
|
||||||
|
|
||||||
|
def run(self) -> Tuple[int, bool]:
|
||||||
|
self.reset()
|
||||||
|
already_visited: Set[int] = set()
|
||||||
|
m = len(self.instructions)
|
||||||
|
while True:
|
||||||
|
if self.oc in already_visited:
|
||||||
|
return (self.acc, True)
|
||||||
|
if not self.oc < m:
|
||||||
|
return (self.acc, False)
|
||||||
|
already_visited.add(self.oc)
|
||||||
|
self.exec()
|
||||||
|
|
||||||
|
def fix(self):
|
||||||
|
for i, instruction in enumerate(self.instructions):
|
||||||
|
op, _ = instruction
|
||||||
|
if op == 'nop' or op == 'jmp':
|
||||||
|
self.invert = i
|
||||||
|
acc, error = self.run()
|
||||||
|
if not error:
|
||||||
|
return acc
|
||||||
|
|
||||||
|
|
||||||
|
data = join(dirname(__file__), '../data.txt')
|
||||||
|
with open(data) as f:
|
||||||
|
vm = VM(f.read())
|
||||||
|
|
||||||
|
acc, err = vm.run()
|
||||||
|
print(acc)
|
||||||
|
|
||||||
|
print(vm.fix())
|
9
solutions/8/test.txt
Normal file
9
solutions/8/test.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
nop +0
|
||||||
|
acc +1
|
||||||
|
jmp +4
|
||||||
|
acc +3
|
||||||
|
jmp -3
|
||||||
|
acc -99
|
||||||
|
acc +1
|
||||||
|
jmp -4
|
||||||
|
acc +6
|
Loading…
Reference in New Issue
Block a user