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()
|