Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- ops = {
- "AND" : lambda x,y: np.bitwise_and(x,y),
- "OR" : lambda x,y: np.bitwise_or(x,y),
- "NOT" : lambda x,y: np.invert(x),
- "RSHIFT": lambda x,y: np.right_shift(x,y),
- "LSHIFT": lambda x,y: np.left_shift(x,y),
- None : lambda x,y: x
- }
- UIT = type(np.uint16(1))
- def propagate(out, backlink):
- if type(out) == UIT:
- regs.update( {backlink: out} )
- def procinput(x):
- if x is None: return None
- if not x.isdigit(): out = regs[x]() if not type(regs[x])==UIT else regs[x]
- else: out = np.uint16(x)
- return out
- def linkfunc(backlink, fromreg1, fromreg2, operator):
- def func():
- out = ops[operator]( procinput(fromreg1), procinput(fromreg2) )
- propagate(out,backlink)
- return out
- return func
- def main():
- lines = [[ side.split() for side in line.strip().split("->")] for line in open("input7.dat","r").readlines()]
- regs = {}
- for line in lines:
- lside,rside = line
- toreg = rside[0]
- if len(lside) == 1: fromreg1, fromreg2, operator = lside[0], None, None
- elif len(lside) == 2: fromreg1, fromreg2, operator = lside[1], None, lside[0]
- elif len(lside) == 3: fromreg1, fromreg2, operator = lside[0], lside[2], lside[1]
- regs.update( {toreg : linkfunc( toreg, fromreg1, fromreg2, operator)} )
- print "Contents of register 'a' is: ", regs["a"]()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement