2020 day 8
This commit is contained in:
parent
e6ab51fdd5
commit
4e82411915
|
@ -0,0 +1,70 @@
|
||||||
|
with open('input08', 'r') as file:
|
||||||
|
lines = [(lambda x: (x[0],int(x[1])))(line.strip().split()) for line in file.readlines()]
|
||||||
|
|
||||||
|
def f_acc(regs, x):
|
||||||
|
regs['acc'] += x
|
||||||
|
regs['ip'] += 1
|
||||||
|
|
||||||
|
def f_jmp(regs, x):
|
||||||
|
regs['ip'] += x
|
||||||
|
|
||||||
|
def f_nop(regs, x):
|
||||||
|
regs['ip'] += 1
|
||||||
|
|
||||||
|
fns = {'acc': f_acc, 'jmp': f_jmp, 'nop': f_nop}
|
||||||
|
inst_swap = {'jmp': 'nop', 'nop': 'jmp', 'acc': 'acc'}
|
||||||
|
|
||||||
|
regs = {'ip': 0, 'acc': 0}
|
||||||
|
executed_ips = set()
|
||||||
|
while(True):
|
||||||
|
if regs['ip'] in executed_ips:
|
||||||
|
print(f'Part 1: {regs["acc"]}')
|
||||||
|
break
|
||||||
|
executed_ips.add(regs['ip'])
|
||||||
|
inst, x = lines[regs['ip']]
|
||||||
|
fns[inst](regs, x)
|
||||||
|
|
||||||
|
# This was an attempt to do a clever backtracking approach to minimize runs. It didn't work properly.
|
||||||
|
#regs = {'ip': 0, 'acc': 0}
|
||||||
|
#stacktrace = []
|
||||||
|
#executed_ips = set()
|
||||||
|
#flipped_ips = set()
|
||||||
|
#while True:
|
||||||
|
#if regs['ip'] in executed_ips:
|
||||||
|
#while regs['ip'] in flipped_ips:
|
||||||
|
#regs, executed_ips = stacktrace.pop()
|
||||||
|
#print(f'loop reached, backtracking to state {regs}')
|
||||||
|
#inst, x = lines[regs['ip']]
|
||||||
|
#inst = inst_swap[inst]
|
||||||
|
#flipped_ips.add(regs['ip'])
|
||||||
|
#else:
|
||||||
|
#executed_ips.add(regs['ip'])
|
||||||
|
#inst, x = lines[regs['ip']]
|
||||||
|
#stacktrace.append((regs.copy(), executed_ips.copy()))
|
||||||
|
#fns[inst](regs, x)
|
||||||
|
#if regs['ip'] >= len(lines):
|
||||||
|
#print('Program completed successfully!')
|
||||||
|
#break
|
||||||
|
|
||||||
|
|
||||||
|
# Turns out the problemspace is so low that bruteforce is king anyway
|
||||||
|
def simulate(flipped_ip):
|
||||||
|
regs = {'ip': 0, 'acc': 0}
|
||||||
|
executed_ips = set()
|
||||||
|
while True:
|
||||||
|
if regs['ip'] in executed_ips:
|
||||||
|
return False
|
||||||
|
executed_ips.add(regs['ip'])
|
||||||
|
inst, x = lines[regs['ip']]
|
||||||
|
if regs['ip'] == flipped_ip:
|
||||||
|
inst = inst_swap[inst]
|
||||||
|
fns[inst](regs, x)
|
||||||
|
if regs['ip'] >= len(lines):
|
||||||
|
return regs['acc']
|
||||||
|
|
||||||
|
for i, (inst, x) in enumerate(lines):
|
||||||
|
if inst != 'acc':
|
||||||
|
result = simulate(i)
|
||||||
|
if result:
|
||||||
|
print(f'Part 2: {result}')
|
||||||
|
break
|
|
@ -0,0 +1,594 @@
|
||||||
|
nop +81
|
||||||
|
acc -17
|
||||||
|
jmp +1
|
||||||
|
acc +31
|
||||||
|
jmp +211
|
||||||
|
acc +30
|
||||||
|
acc -7
|
||||||
|
jmp +29
|
||||||
|
acc +16
|
||||||
|
nop +89
|
||||||
|
jmp +163
|
||||||
|
acc -9
|
||||||
|
acc +40
|
||||||
|
jmp +189
|
||||||
|
jmp +111
|
||||||
|
acc +0
|
||||||
|
acc +6
|
||||||
|
jmp +19
|
||||||
|
acc +6
|
||||||
|
acc +16
|
||||||
|
jmp +78
|
||||||
|
nop +178
|
||||||
|
jmp +441
|
||||||
|
acc +27
|
||||||
|
acc +34
|
||||||
|
jmp +3
|
||||||
|
acc +9
|
||||||
|
jmp +302
|
||||||
|
acc -4
|
||||||
|
acc +33
|
||||||
|
jmp +417
|
||||||
|
nop +80
|
||||||
|
acc +34
|
||||||
|
acc +11
|
||||||
|
nop +181
|
||||||
|
jmp -12
|
||||||
|
jmp +143
|
||||||
|
jmp +53
|
||||||
|
jmp +52
|
||||||
|
jmp +324
|
||||||
|
acc +0
|
||||||
|
acc -8
|
||||||
|
acc +47
|
||||||
|
jmp +1
|
||||||
|
jmp +169
|
||||||
|
acc +23
|
||||||
|
acc -14
|
||||||
|
acc -6
|
||||||
|
acc -13
|
||||||
|
jmp +267
|
||||||
|
acc +24
|
||||||
|
jmp +188
|
||||||
|
acc +36
|
||||||
|
jmp +160
|
||||||
|
acc +14
|
||||||
|
acc +34
|
||||||
|
acc -18
|
||||||
|
jmp +500
|
||||||
|
jmp +137
|
||||||
|
jmp +295
|
||||||
|
acc +11
|
||||||
|
jmp +393
|
||||||
|
acc +24
|
||||||
|
acc +37
|
||||||
|
nop +258
|
||||||
|
acc +20
|
||||||
|
jmp -52
|
||||||
|
acc +40
|
||||||
|
jmp +1
|
||||||
|
jmp +62
|
||||||
|
acc +34
|
||||||
|
nop +312
|
||||||
|
acc +39
|
||||||
|
nop +431
|
||||||
|
jmp +386
|
||||||
|
acc -17
|
||||||
|
nop +282
|
||||||
|
acc -8
|
||||||
|
jmp +490
|
||||||
|
jmp +148
|
||||||
|
jmp -1
|
||||||
|
jmp +201
|
||||||
|
jmp -54
|
||||||
|
acc +0
|
||||||
|
acc +22
|
||||||
|
jmp +110
|
||||||
|
nop +443
|
||||||
|
nop +388
|
||||||
|
acc +28
|
||||||
|
jmp +167
|
||||||
|
nop +48
|
||||||
|
acc +46
|
||||||
|
jmp +406
|
||||||
|
acc +11
|
||||||
|
acc +17
|
||||||
|
acc +23
|
||||||
|
jmp +1
|
||||||
|
jmp +286
|
||||||
|
acc +0
|
||||||
|
acc -15
|
||||||
|
acc +1
|
||||||
|
acc +6
|
||||||
|
jmp +214
|
||||||
|
acc +39
|
||||||
|
acc +21
|
||||||
|
acc +34
|
||||||
|
jmp +341
|
||||||
|
jmp +417
|
||||||
|
jmp +400
|
||||||
|
jmp -2
|
||||||
|
jmp +117
|
||||||
|
acc -10
|
||||||
|
acc +14
|
||||||
|
acc +10
|
||||||
|
acc +10
|
||||||
|
jmp +339
|
||||||
|
jmp +162
|
||||||
|
acc +16
|
||||||
|
nop +20
|
||||||
|
acc +12
|
||||||
|
acc -11
|
||||||
|
jmp +78
|
||||||
|
acc +21
|
||||||
|
acc +12
|
||||||
|
jmp +181
|
||||||
|
jmp +404
|
||||||
|
nop +26
|
||||||
|
jmp +46
|
||||||
|
jmp +1
|
||||||
|
jmp -93
|
||||||
|
jmp -76
|
||||||
|
acc -1
|
||||||
|
nop +30
|
||||||
|
acc +48
|
||||||
|
jmp +238
|
||||||
|
acc +6
|
||||||
|
nop +244
|
||||||
|
jmp +36
|
||||||
|
acc +10
|
||||||
|
acc +8
|
||||||
|
acc +19
|
||||||
|
acc +3
|
||||||
|
jmp -72
|
||||||
|
nop +225
|
||||||
|
jmp +228
|
||||||
|
acc +44
|
||||||
|
acc -13
|
||||||
|
jmp +349
|
||||||
|
acc -8
|
||||||
|
acc +45
|
||||||
|
acc -11
|
||||||
|
jmp +76
|
||||||
|
acc +46
|
||||||
|
jmp +196
|
||||||
|
acc +4
|
||||||
|
acc +45
|
||||||
|
jmp +218
|
||||||
|
acc +38
|
||||||
|
jmp -77
|
||||||
|
acc +10
|
||||||
|
acc +46
|
||||||
|
jmp +385
|
||||||
|
acc +29
|
||||||
|
jmp +159
|
||||||
|
jmp +247
|
||||||
|
jmp +1
|
||||||
|
acc +26
|
||||||
|
nop +357
|
||||||
|
jmp +284
|
||||||
|
nop +335
|
||||||
|
acc -18
|
||||||
|
acc +41
|
||||||
|
jmp +326
|
||||||
|
nop +181
|
||||||
|
jmp +189
|
||||||
|
nop -135
|
||||||
|
acc +50
|
||||||
|
nop +152
|
||||||
|
jmp -53
|
||||||
|
acc +0
|
||||||
|
jmp +1
|
||||||
|
acc +23
|
||||||
|
jmp +167
|
||||||
|
nop +131
|
||||||
|
acc +18
|
||||||
|
acc +42
|
||||||
|
nop +13
|
||||||
|
jmp +28
|
||||||
|
jmp +284
|
||||||
|
acc +10
|
||||||
|
acc +43
|
||||||
|
jmp +243
|
||||||
|
jmp +64
|
||||||
|
acc +17
|
||||||
|
jmp +213
|
||||||
|
acc +0
|
||||||
|
acc +29
|
||||||
|
jmp +25
|
||||||
|
jmp -180
|
||||||
|
nop +184
|
||||||
|
jmp +90
|
||||||
|
jmp -13
|
||||||
|
jmp +1
|
||||||
|
jmp -86
|
||||||
|
jmp +1
|
||||||
|
acc +20
|
||||||
|
acc +49
|
||||||
|
jmp +6
|
||||||
|
jmp +188
|
||||||
|
acc +24
|
||||||
|
acc +0
|
||||||
|
nop -16
|
||||||
|
jmp +160
|
||||||
|
jmp +2
|
||||||
|
jmp +68
|
||||||
|
acc +1
|
||||||
|
acc +30
|
||||||
|
jmp -52
|
||||||
|
acc -19
|
||||||
|
jmp +1
|
||||||
|
acc -18
|
||||||
|
jmp +153
|
||||||
|
acc +0
|
||||||
|
jmp -92
|
||||||
|
nop -72
|
||||||
|
acc +38
|
||||||
|
jmp +13
|
||||||
|
jmp +160
|
||||||
|
acc +24
|
||||||
|
acc +0
|
||||||
|
jmp +111
|
||||||
|
acc -4
|
||||||
|
acc +45
|
||||||
|
jmp -215
|
||||||
|
acc +16
|
||||||
|
acc +25
|
||||||
|
acc +28
|
||||||
|
acc +12
|
||||||
|
jmp +348
|
||||||
|
nop +144
|
||||||
|
jmp -52
|
||||||
|
acc +41
|
||||||
|
jmp +1
|
||||||
|
acc +12
|
||||||
|
acc +14
|
||||||
|
jmp +207
|
||||||
|
jmp +1
|
||||||
|
acc +26
|
||||||
|
acc +4
|
||||||
|
jmp +1
|
||||||
|
jmp +15
|
||||||
|
jmp +20
|
||||||
|
acc +23
|
||||||
|
acc +41
|
||||||
|
jmp -8
|
||||||
|
jmp +284
|
||||||
|
nop +204
|
||||||
|
acc +47
|
||||||
|
acc +35
|
||||||
|
acc +17
|
||||||
|
jmp -58
|
||||||
|
jmp +1
|
||||||
|
acc +8
|
||||||
|
nop +72
|
||||||
|
jmp -210
|
||||||
|
jmp +324
|
||||||
|
acc -7
|
||||||
|
acc +12
|
||||||
|
acc +48
|
||||||
|
acc +1
|
||||||
|
jmp +269
|
||||||
|
acc -19
|
||||||
|
acc +18
|
||||||
|
jmp +167
|
||||||
|
jmp +1
|
||||||
|
acc +48
|
||||||
|
acc +2
|
||||||
|
jmp +134
|
||||||
|
jmp +204
|
||||||
|
jmp +1
|
||||||
|
acc -1
|
||||||
|
jmp +191
|
||||||
|
nop -203
|
||||||
|
nop +104
|
||||||
|
acc -16
|
||||||
|
jmp +261
|
||||||
|
acc +32
|
||||||
|
acc +11
|
||||||
|
acc +37
|
||||||
|
jmp +74
|
||||||
|
acc -16
|
||||||
|
acc -4
|
||||||
|
acc +10
|
||||||
|
jmp +101
|
||||||
|
acc +47
|
||||||
|
acc +18
|
||||||
|
jmp +122
|
||||||
|
acc +42
|
||||||
|
acc +30
|
||||||
|
jmp -47
|
||||||
|
nop -54
|
||||||
|
acc +38
|
||||||
|
nop +237
|
||||||
|
acc +15
|
||||||
|
jmp -58
|
||||||
|
acc +50
|
||||||
|
acc +37
|
||||||
|
acc +20
|
||||||
|
jmp -163
|
||||||
|
nop +49
|
||||||
|
acc +28
|
||||||
|
acc +50
|
||||||
|
acc -13
|
||||||
|
jmp -305
|
||||||
|
jmp +66
|
||||||
|
jmp +92
|
||||||
|
acc +30
|
||||||
|
acc +0
|
||||||
|
jmp -190
|
||||||
|
nop +153
|
||||||
|
acc -12
|
||||||
|
jmp +73
|
||||||
|
nop -241
|
||||||
|
acc +25
|
||||||
|
nop -310
|
||||||
|
jmp +127
|
||||||
|
acc +32
|
||||||
|
acc +6
|
||||||
|
jmp +55
|
||||||
|
jmp -250
|
||||||
|
acc +25
|
||||||
|
acc -2
|
||||||
|
acc +42
|
||||||
|
nop +25
|
||||||
|
jmp -264
|
||||||
|
acc +47
|
||||||
|
acc +47
|
||||||
|
nop -297
|
||||||
|
jmp -146
|
||||||
|
jmp +1
|
||||||
|
jmp -257
|
||||||
|
acc +48
|
||||||
|
acc +49
|
||||||
|
acc -2
|
||||||
|
jmp +232
|
||||||
|
acc +25
|
||||||
|
acc +9
|
||||||
|
acc -6
|
||||||
|
jmp +115
|
||||||
|
jmp +53
|
||||||
|
acc +4
|
||||||
|
acc +19
|
||||||
|
acc -5
|
||||||
|
jmp -188
|
||||||
|
acc +0
|
||||||
|
acc -16
|
||||||
|
jmp +132
|
||||||
|
jmp +189
|
||||||
|
acc -8
|
||||||
|
jmp -54
|
||||||
|
acc -19
|
||||||
|
nop -338
|
||||||
|
jmp -322
|
||||||
|
acc +43
|
||||||
|
acc +19
|
||||||
|
acc +1
|
||||||
|
jmp -238
|
||||||
|
jmp -111
|
||||||
|
acc +48
|
||||||
|
jmp +49
|
||||||
|
nop -225
|
||||||
|
jmp +153
|
||||||
|
jmp +55
|
||||||
|
jmp -264
|
||||||
|
acc +27
|
||||||
|
acc -1
|
||||||
|
acc -1
|
||||||
|
acc +7
|
||||||
|
jmp +208
|
||||||
|
jmp +68
|
||||||
|
jmp -218
|
||||||
|
acc +13
|
||||||
|
jmp +70
|
||||||
|
acc +1
|
||||||
|
jmp +12
|
||||||
|
acc -7
|
||||||
|
jmp +129
|
||||||
|
jmp +1
|
||||||
|
acc +7
|
||||||
|
acc +11
|
||||||
|
acc +2
|
||||||
|
jmp -377
|
||||||
|
acc +0
|
||||||
|
jmp -241
|
||||||
|
jmp +110
|
||||||
|
jmp -355
|
||||||
|
acc -13
|
||||||
|
jmp +1
|
||||||
|
jmp -120
|
||||||
|
nop +83
|
||||||
|
acc +19
|
||||||
|
jmp -378
|
||||||
|
acc +26
|
||||||
|
jmp +72
|
||||||
|
acc +9
|
||||||
|
acc +0
|
||||||
|
jmp -92
|
||||||
|
nop -242
|
||||||
|
jmp -200
|
||||||
|
acc +29
|
||||||
|
jmp -374
|
||||||
|
acc -19
|
||||||
|
acc +40
|
||||||
|
acc +9
|
||||||
|
nop -117
|
||||||
|
jmp -144
|
||||||
|
acc +6
|
||||||
|
jmp +122
|
||||||
|
acc +7
|
||||||
|
acc +9
|
||||||
|
acc +50
|
||||||
|
jmp -367
|
||||||
|
acc +18
|
||||||
|
acc +18
|
||||||
|
acc +6
|
||||||
|
nop -212
|
||||||
|
jmp -19
|
||||||
|
acc +34
|
||||||
|
acc -1
|
||||||
|
jmp +1
|
||||||
|
jmp -89
|
||||||
|
acc -19
|
||||||
|
acc +20
|
||||||
|
jmp -70
|
||||||
|
jmp +117
|
||||||
|
acc +38
|
||||||
|
acc +23
|
||||||
|
acc +29
|
||||||
|
acc +20
|
||||||
|
jmp -330
|
||||||
|
acc +30
|
||||||
|
acc +38
|
||||||
|
nop -2
|
||||||
|
jmp +96
|
||||||
|
acc +11
|
||||||
|
acc +32
|
||||||
|
jmp -194
|
||||||
|
jmp -64
|
||||||
|
acc +10
|
||||||
|
acc -2
|
||||||
|
acc -2
|
||||||
|
jmp -320
|
||||||
|
jmp -314
|
||||||
|
jmp +115
|
||||||
|
acc -1
|
||||||
|
acc +38
|
||||||
|
acc +30
|
||||||
|
jmp -407
|
||||||
|
acc +1
|
||||||
|
jmp -32
|
||||||
|
jmp +55
|
||||||
|
acc +50
|
||||||
|
jmp +84
|
||||||
|
nop -69
|
||||||
|
acc +0
|
||||||
|
nop -270
|
||||||
|
acc +38
|
||||||
|
jmp -33
|
||||||
|
acc +11
|
||||||
|
acc +32
|
||||||
|
acc -15
|
||||||
|
jmp -122
|
||||||
|
jmp -413
|
||||||
|
acc -2
|
||||||
|
jmp -322
|
||||||
|
acc +49
|
||||||
|
jmp +1
|
||||||
|
acc +26
|
||||||
|
nop -455
|
||||||
|
jmp -105
|
||||||
|
acc +26
|
||||||
|
jmp -6
|
||||||
|
nop +42
|
||||||
|
acc +15
|
||||||
|
jmp -149
|
||||||
|
acc -7
|
||||||
|
acc +34
|
||||||
|
jmp +59
|
||||||
|
acc -9
|
||||||
|
acc -11
|
||||||
|
jmp -122
|
||||||
|
nop -89
|
||||||
|
acc +28
|
||||||
|
acc +34
|
||||||
|
acc +14
|
||||||
|
jmp -127
|
||||||
|
jmp -89
|
||||||
|
jmp -335
|
||||||
|
acc +49
|
||||||
|
acc +0
|
||||||
|
acc +43
|
||||||
|
acc +41
|
||||||
|
jmp -314
|
||||||
|
jmp -56
|
||||||
|
acc +11
|
||||||
|
jmp -443
|
||||||
|
acc +7
|
||||||
|
jmp -11
|
||||||
|
acc +24
|
||||||
|
acc +16
|
||||||
|
acc +44
|
||||||
|
jmp -29
|
||||||
|
acc +38
|
||||||
|
acc +8
|
||||||
|
jmp +50
|
||||||
|
acc +30
|
||||||
|
acc +8
|
||||||
|
acc +14
|
||||||
|
jmp -160
|
||||||
|
acc -10
|
||||||
|
acc +46
|
||||||
|
acc +2
|
||||||
|
acc +21
|
||||||
|
jmp -328
|
||||||
|
acc +17
|
||||||
|
acc +23
|
||||||
|
jmp -374
|
||||||
|
acc +20
|
||||||
|
jmp -160
|
||||||
|
acc +1
|
||||||
|
acc +30
|
||||||
|
acc +22
|
||||||
|
jmp +1
|
||||||
|
jmp -302
|
||||||
|
jmp +1
|
||||||
|
acc +3
|
||||||
|
acc +19
|
||||||
|
acc +28
|
||||||
|
jmp +30
|
||||||
|
acc +50
|
||||||
|
acc +23
|
||||||
|
jmp -244
|
||||||
|
acc +20
|
||||||
|
jmp +1
|
||||||
|
acc +27
|
||||||
|
jmp -6
|
||||||
|
jmp -71
|
||||||
|
acc +28
|
||||||
|
acc +35
|
||||||
|
nop -3
|
||||||
|
jmp -62
|
||||||
|
nop -386
|
||||||
|
nop -217
|
||||||
|
jmp -45
|
||||||
|
acc +7
|
||||||
|
acc -11
|
||||||
|
jmp -104
|
||||||
|
nop -279
|
||||||
|
jmp +1
|
||||||
|
acc -15
|
||||||
|
acc -17
|
||||||
|
jmp -478
|
||||||
|
nop -11
|
||||||
|
jmp -432
|
||||||
|
acc -3
|
||||||
|
acc +12
|
||||||
|
jmp -558
|
||||||
|
jmp -513
|
||||||
|
acc +3
|
||||||
|
acc +46
|
||||||
|
jmp -532
|
||||||
|
acc -14
|
||||||
|
acc +32
|
||||||
|
acc -8
|
||||||
|
acc +25
|
||||||
|
jmp -521
|
||||||
|
acc +6
|
||||||
|
acc +11
|
||||||
|
acc +40
|
||||||
|
acc +33
|
||||||
|
jmp -266
|
||||||
|
acc +17
|
||||||
|
acc +11
|
||||||
|
nop -203
|
||||||
|
acc +2
|
||||||
|
jmp -433
|
||||||
|
acc +38
|
||||||
|
jmp -476
|
||||||
|
jmp -125
|
||||||
|
jmp +1
|
||||||
|
acc +24
|
||||||
|
acc -11
|
||||||
|
jmp +1
|
||||||
|
jmp +1
|
Loading…
Reference in New Issue