Skip to content

Instantly share code, notes, and snippets.

@sotolf2
Created December 5, 2019 12:50
Show Gist options
  • Save sotolf2/9494f63452d953a810e90e0fb86b2100 to your computer and use it in GitHub Desktop.
Save sotolf2/9494f63452d953a810e90e0fb86b2100 to your computer and use it in GitHub Desktop.
inlines = []
with open("day5.txt") as f:
inlines = f.readline() \
|> .strip() \
|> .split(',') \
|> map$(-> int(_)) \
|> list
def run(intops, inn=None):
output = []
ip = 0
while True:
parseop = intops[ip]
mp1 = parseop // 100 % 10
mp2 = parseop // 1000 % 10
mp3 = parseop // 10000 % 10
op = parseop % 100
#print("ip: {}".format(ip))
#print("op: {}, mp1: {}, mp2: {}, mp3 {}".format(op, mp1, mp2, mp3))
#print("program: {}".format(intops[ip:ip+20]))
#print("program: {}".format(intops))
if op == 99:
return output
elif op == 1:
# Add
p1 = intops[intops[ip + 1]] if mp1 != 1 else intops[ip + 1]
p2 = intops[intops[ip + 2]] if mp2 != 1 else intops[ip + 2]
intops[intops[ip + 3]] = p1 + p2
ip += 4
elif op == 2:
# Mul
p1 = intops[intops[ip + 1]] if mp1 != 1 else intops[ip + 1]
p2 = intops[intops[ip + 2]] if mp2 != 1 else intops[ip + 2]
intops[intops[ip + 3]] = p1 * p2
ip += 4
elif op == 3:
# Input
#destidx = intops[intops[ip + 1]] if mp1 != 1 else intops[ip + 1]
destidx = intops[ip + 1]
intops[destidx] = inn
ip += 2
elif op == 4:
# Output
val = intops[intops[ip + 1]] if mp1 != 1 else intops[ip + 1]
#val = intops[intops[ip + 1]]
output.append(val)
ip += 2
elif op == 5:
# Jmp true
val = intops[intops[ip + 1]] if mp1 != 1 else intops[ip + 1]
addr = intops[intops[ip + 2]] if mp2 != 1 else intops[ip + 2]
if val == 0:
ip += 3
else:
ip = addr
elif op == 6:
# Jmp false
val = intops[intops[ip + 1]] if mp1 != 1 else intops[ip + 1]
addr = intops[intops[ip + 2]] if mp2 != 1 else intops[ip + 2]
if val != 0:
ip += 3
else:
ip = addr
elif op == 7:
# less than
p1 = intops[intops[ip + 1]] if mp1 != 1 else intops[ip + 1]
p2 = intops[intops[ip + 2]] if mp2 != 1 else intops[ip + 2]
if p1 < p2:
intops[intops[ip + 3]] = 1
else:
intops[intops[ip + 3]] = 0
ip += 4
elif op == 8:
# equals
p1 = intops[intops[ip + 1]] if mp1 != 1 else intops[ip + 1]
p2 = intops[intops[ip + 2]] if mp2 != 1 else intops[ip + 2]
if p1 == p2:
intops[intops[ip + 3]] = 1
else:
intops[intops[ip + 3]] = 0
ip += 4
else:
print("!ERROR!")
break
run(inlines[:], 1)
run(inlines[:], 5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment