57 lines
1.1 KiB
Python
57 lines
1.1 KiB
Python
import shared
|
|
import matrix
|
|
from pprint import pprint
|
|
import numpy as np
|
|
import operator
|
|
|
|
OPS = {
|
|
'AND': operator.and_,
|
|
'OR': operator.or_,
|
|
'LSHIFT': operator.lshift,
|
|
'RSHIFT': operator.rshift,
|
|
}
|
|
|
|
|
|
def NOT(x):
|
|
return int(x) ^ 65535
|
|
|
|
|
|
def pt1(inp):
|
|
print(inp)
|
|
registers = {}
|
|
for i in inp:
|
|
inst, dest = i.split(" -> ")
|
|
if " " not in inst:
|
|
registers[dest] = inst
|
|
continue
|
|
inst = inst.split()
|
|
if inst[0] == "NOT":
|
|
registers[dest] = NOT(registers[inst[1]])
|
|
continue
|
|
a,op,b = inst
|
|
try:
|
|
a = int(a)
|
|
except ValueError:
|
|
a = int(registers[a])
|
|
try:
|
|
b = int(b)
|
|
except ValueError:
|
|
b = int(registers[b])
|
|
print(a,b)
|
|
registers[dest] = OPS[op](a,b)
|
|
|
|
#x,op,y = inst.split(" ")
|
|
|
|
|
|
pprint(registers)
|
|
|
|
|
|
def main():
|
|
with open(shared.get_fname(7), "r") as f:
|
|
inp = [x.rstrip() for x in f.readlines()]
|
|
pt1(inp)
|
|
#pt2(inp)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|