You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.3 KiB
Python

with open("input") as f:
instructions = [n.strip() for n in f.readlines()]
SOURCES = dict()
for instruction in instructions:
print(instruction)
[operation, wire] = instruction.split(" -> ")
SOURCES[wire] = operation
print(SOURCES)
def evaluate_wire(wire):
try:
return int(wire)
except ValueError:
pass
operation = SOURCES[wire]
print("evaluating wire", wire, "; operation:", operation)
parameters = operation.split(" ")
result = None
if "NOT" in operation:
[_, a] = parameters
result = evaluate_wire(a) ^ 0b1111111111111111
elif "OR" in operation:
[a, _, b] = parameters
result = evaluate_wire(a) | evaluate_wire(b)
elif "AND" in operation:
[a, _, b] = parameters
result = evaluate_wire(a) & evaluate_wire(b)
elif "LSHIFT" in operation:
[a, _, b] = parameters
result = evaluate_wire(a) << evaluate_wire(b)
elif "RSHIFT" in operation:
[a, _, b] = parameters
result = evaluate_wire(a) >> evaluate_wire(b)
else:
result = evaluate_wire(operation)
SOURCES[wire] = str(result)
return result
print(evaluate_wire("a"))
# for wire in ["d", "e", "f", "g", "h", "i"]:
# print("==", wire, "==")
# print(evaluate_wire(wire))
# print(SOURCES)
print("finish")