mirror of
https://github.com/cupcakearmy/advent-of-code.git
synced 2024-07-07 22:24:46 +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