mirror of
https://github.com/Crocmagnon/advent-of-code.git
synced 2024-11-22 06:28:11 +01:00
Solve day 8
This commit is contained in:
parent
df819316b6
commit
755b6628ea
3 changed files with 681 additions and 0 deletions
59
2020/day08-console.py
Normal file
59
2020/day08-console.py
Normal file
|
@ -0,0 +1,59 @@
|
|||
import copy
|
||||
from typing import List
|
||||
|
||||
|
||||
def main(filename: str, expected_part_1: int = None, expected_part_2: int = None):
|
||||
print(f"\n+ Running on {filename}")
|
||||
with open(filename) as f:
|
||||
program = f.read().strip().split("\n") # type: List[str]
|
||||
|
||||
counter_part_1, _ = run_until_infinite_loop_or_end(program)
|
||||
|
||||
pointer = 0
|
||||
infinite = True
|
||||
while pointer < len(program) and infinite:
|
||||
program_copy = copy.deepcopy(program)
|
||||
instruction = program_copy[pointer]
|
||||
if "jmp" in instruction:
|
||||
program_copy[pointer] = instruction.replace("jmp", "nop")
|
||||
elif "nop" in instruction:
|
||||
program_copy[pointer] = instruction.replace("nop", "jmp")
|
||||
counter_part_2, infinite = run_until_infinite_loop_or_end(program_copy)
|
||||
pointer += 1
|
||||
|
||||
print(f"1. Found {counter_part_1}")
|
||||
if expected_part_1:
|
||||
assert expected_part_1 == counter_part_1
|
||||
|
||||
print(f"2. Found {counter_part_2}")
|
||||
if expected_part_2:
|
||||
assert expected_part_2 == counter_part_2
|
||||
|
||||
|
||||
def run_until_infinite_loop_or_end(program):
|
||||
"""
|
||||
Run the program until it ends or it loops infinitely.
|
||||
Returns the value of the accumulator before the end or the infinite loop
|
||||
and a boolean indicating whether the program terminated because of a loop (True)
|
||||
or a normal termination (False).
|
||||
"""
|
||||
accumulator = 0
|
||||
visited = set()
|
||||
pointer = 0
|
||||
while pointer < len(program) and pointer not in visited:
|
||||
visited.add(pointer)
|
||||
instruction, argument = program[pointer].split()
|
||||
argument = int(argument)
|
||||
if instruction == "acc":
|
||||
accumulator += argument
|
||||
pointer += 1
|
||||
elif instruction == "jmp":
|
||||
pointer += argument
|
||||
else:
|
||||
pointer += 1
|
||||
return accumulator, pointer in visited
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main("inputs/day08-test1", 5, 8)
|
||||
main("inputs/day08", 1087, 780)
|
613
2020/inputs/day08
Normal file
613
2020/inputs/day08
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
|
9
2020/inputs/day08-test1
Normal file
9
2020/inputs/day08-test1
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 a new issue