Advertisement
Guest User

Untitled

a guest
Dec 9th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.63 KB | None | 0 0
  1. registers = {}
  2. operations = ['NOT','OR','AND','RSHIFT','LSHIFT']
  3. commands = []
  4. with open('input7.txt') as f:
  5.     for l in f.readlines():
  6.         p = l.strip().split(' ')
  7.         length = len(p)
  8.         for i,c in enumerate(p):
  9.             if c not in operations:
  10.                 if not c.isdigit():
  11.                     if c not in registers:
  12.                         registers[c] = None
  13.                 else:
  14.                     p[i] = int(c)
  15.         commands.append(p)
  16.  
  17. while len(commands) != 0:
  18.     commands_copy = commands[:]
  19.     for c in commands_copy:
  20.         l = len(c)
  21.         if l == 2:
  22.             if type(c[0]) == int:
  23.                 registers[c[1]] = c[0]
  24.                 commands.remove(c)
  25.             elif registers[c[0]] != None:
  26.                 registers[c[1]] = registers[c[0]]
  27.                 commands.remove(c)
  28.         if l == 3:
  29.             if registers[c[1]] != None:
  30.                 registers[c[2]] = 65535 - registers[c[1]]
  31.                 commands.remove(c)
  32.         if l == 4:
  33.             if c[1] == 'OR':
  34.                 if type(c[0]) == int:
  35.                     if registers[c[2]] != None:
  36.                         registers[c[3]] = (c[0] | registers[c[2]])
  37.                         commands.remove(c)
  38.                 elif type(c[2]) == int:
  39.                     if registers[c[2]] != None:
  40.                         registers[c[3]] = (c[2] | registers[c[0]])
  41.                         commands.remove(c)
  42.                 elif registers[c[0]] != None and registers[c[2]] != None:
  43.                     registers[c[3]] = (registers[c[0]] | registers[c[2]])
  44.                     commands.remove(c)
  45.             elif c[1] == 'AND':
  46.                 if type(c[0]) == int:
  47.                     if registers[c[2]] != None:
  48.                         registers[c[3]] = (c[0] & registers[c[2]])
  49.                         commands.remove(c)
  50.                 elif type(c[2]) == int:
  51.                     if registers[c[2]] != None:
  52.                         registers[c[3]] = (c[2] & registers[c[0]])
  53.                         commands.remove(c)
  54.                 elif registers[c[0]] != None and registers[c[2]] != None:
  55.                     registers[c[3]] = (registers[c[0]] & registers[c[2]])
  56.                     commands.remove(c)
  57.             elif c[1] == 'RSHIFT':
  58.                 if registers[c[0]] != None:
  59.                     registers[c[3]] = (registers[c[0]] // (2**c[2]))
  60.                     commands.remove(c)
  61.             elif c[1] == 'LSHIFT':
  62.                 if registers[c[0]] != None:
  63.                     registers[c[3]] = (registers[c[0]] * (2**c[2]) & 65535)
  64.                     commands.remove(c)
  65.  
  66. print(registers['a'])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement