You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
722 B
32 lines
722 B
4 years ago
|
#!/usr/bin/env python3
|
||
|
|
||
|
from sys import argv
|
||
|
|
||
|
m = {}
|
||
|
m2 = {}
|
||
|
|
||
|
m_and = (2**36)-1
|
||
|
m_orr = 0
|
||
|
for l in open(argv[1]):
|
||
|
l = l.strip().split(" = ")
|
||
|
if l[0] == "mask":
|
||
|
m_and = int(l[1].replace("X", "1"), 2)
|
||
|
m_orr = int(l[1].replace("X", "0"), 2)
|
||
|
elif l[0].startswith("mem[") and l[0].endswith("]"):
|
||
|
o = int(l[0][4:-1])
|
||
|
v = int(l[1])
|
||
|
m[o] = (v & m_and) | m_orr
|
||
|
|
||
|
o |= m_and
|
||
|
f = m_and ^ m_orr
|
||
|
a = [o]
|
||
|
for x in range(36):
|
||
|
if ((f >> x) & 1) == 0:
|
||
|
continue
|
||
|
for e in range(len(a)):
|
||
|
a.append(a[e] ^ (1 << x))
|
||
|
for e in a:
|
||
|
m2[e] = v
|
||
|
print(sum(m.values()))
|
||
|
print(sum(m2.values()))
|