51 lines
No EOL
946 B
Python
Executable file
51 lines
No EOL
946 B
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
|
|
def r(inst, pos):
|
|
return inst[inst[pos]]
|
|
|
|
def w(inst, pos, v):
|
|
inst[inst[pos]] = v
|
|
|
|
def perform(inst):
|
|
pos = 0
|
|
while 1:
|
|
if inst[pos] == 1:
|
|
w(inst, pos+3, (r(inst,pos+1) + r(inst,pos+2)))
|
|
elif inst[pos] == 2:
|
|
w(inst, pos+3, (r(inst,pos+1) * r(inst,pos+2)))
|
|
elif inst[pos] == 99:
|
|
break
|
|
pos += 4
|
|
return inst[0]
|
|
|
|
# run with '2' argument for part2 result.
|
|
part2 = (len(sys.argv) == 2 and sys.argv[1] == '2')
|
|
|
|
for line in sys.stdin:
|
|
instructions = line.rstrip().split(',')
|
|
|
|
sx = {12}
|
|
sy = {2}
|
|
|
|
if part2:
|
|
sx = range(0,99)
|
|
sy = range(0,99)
|
|
|
|
for x in sx:
|
|
for y in sy:
|
|
# reset the list
|
|
ints = []
|
|
for i in instructions:
|
|
ints.append(int(i))
|
|
|
|
# override values
|
|
ints[1] = x
|
|
ints[2] = y
|
|
res = perform(ints)
|
|
if part2:
|
|
if(res == 19690720):
|
|
print((100*x)+y)
|
|
else:
|
|
print(res) |