adventofcode2020/8/8.py

67 lines
1.2 KiB
Python
Raw Normal View History

2020-12-08 10:17:06 -05:00
#!/usr/bin/env python3
from math import floor
import sys
L = []
with open(sys.argv[1], 'r') as f:
L = f.readlines()
L = [x.strip().split() for x in L]
L = [[x[0], int(x[1])] for x in L]
# part 1
log = []
accum = 0
i = 0
while True:
if i in log:
break
else:
log.append(i)
if L[i][0] == 'nop':
i += 1
continue
if L[i][0] == 'acc':
accum += L[i][1]
i += 1
continue
if L[i][0] == 'jmp':
i += L[i][1]
print(accum)
# part 2
accum = 0
def infiniteloop(L):
log = []
accum = 0
i = 0
while True:
if i in log:
return
elif i == len(L):
print(accum)
sys.exit(0)
else:
log.append(i)
if L[i][0] == 'nop':
i += 1
continue
if L[i][0] == 'acc':
accum += L[i][1]
i += 1
continue
if L[i][0] == 'jmp':
i += L[i][1]
for i in range(len(L)):
if L[i][0] == 'nop':
L[i][0] = 'jmp'
infiniteloop(L)
L[i][0] = 'nop'
elif L[i][0] == 'jmp':
L[i][0] = 'nop'
infiniteloop(L)
L[i][0] = 'jmp'
print(accum)