Advertisement
Guest User

Untitled

a guest
Dec 14th, 2020
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.85 KB | None | 0 0
  1. def day14_2():
  2.     with open("input.txt", "r") as file:
  3.         data = file.readlines()
  4.  
  5.     mem = {}
  6.     on_mask = 0
  7.     for line in data:
  8.         if line[1] == "a":  # Mask
  9.             mask = line[7:-1]
  10.             on_mask = int(mask.replace("X", "0"), base=2)  # OR to set 1s
  11.         else:
  12.             addr = [int(i) for i in bin(int(line[line.find("[") + 1:line.find("]")]) | on_mask)[2:]]
  13.             val = int(line[line.find("=") + 2:-1])
  14.  
  15.             floating = [i - len(addr) for i, a in enumerate(mask) if a == "X"]
  16.             for i in range(2**len(floating)):
  17.                 for j, k in enumerate(floating):
  18.                     addr[k] = (i & (1 << j)) >> j
  19.                 new_addr = int("".join(map(str, addr)), 2)
  20.                 mem[new_addr] = val
  21.  
  22.     total = 0
  23.     for k, v in mem.items():
  24.         total += v
  25.  
  26.     return total
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement