Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Input: lines like "<code>: <0 or 1>", then blank line,
- # then lines like "<code> (OR/AND/XOR) <code> -> <code>"
- # Output: should result in
- # (2^0 * x00 + 2^1 * x01 + ...)
- # + (2^0 * y00 + 2^1 * y01 + ...)
- # = (2^0 * z00 + 2^1 * z01 + ...)
- # but four pairs of rules have their outputs swapped
- # output those eight outputs (sorted, joined by commas)
- values = {}
- rules = {}
- z_values = []
- found_blank_line = False
- file = open("24_input.txt", "r")
- for line in file:
- line = line.replace("\n", "")
- if line == "":
- found_blank_line = True
- continue
- if not found_blank_line:
- parts = line.split(": ")
- if parts[0][0] == "z":
- z_values.append(parts[0])
- continue
- parts = line.split(" -> ")
- rules[parts[0]] = parts[1]
- if parts[1][0] == "z":
- z_values.append(parts[1])
- z_values = list(set(z_values))
- z_values.sort()
- for reference_z_value in z_values:
- z_index = reference_z_value[1:]
- values["x" + z_index] = 0
- values["y" + z_index] = 0
- sources = ["x" + z_index, "y" + z_index]
- new_rules = [" "] * 5
- while True:
- found_something = False
- remaining_rules = rules.copy()
- for rule in rules:
- parts = rule.split(" ")
- code1, operand, code2, result = parts[0], parts[1], parts[2], rules[rule]
- if code1 in values and code2 in values:
- if operand == "AND":
- values[result] = values[code1] & values[code2]
- if code1 in sources and code2 in sources:
- new_rules[3] = rule + " -> " + rules[rule]
- else:
- new_rules[2] = rule + " -> " + rules[rule]
- if operand == "OR":
- values[result] = values[code1] | values[code2]
- new_rules[4] = rule + " -> " + rules[rule]
- if operand == "XOR":
- values[result] = values[code1] ^ values[code2]
- if code1 in sources and code2 in sources:
- new_rules[0] = rule + " -> " + rules[rule]
- else:
- new_rules[1] = rule + " -> " + rules[rule]
- found_something = True
- del remaining_rules[rule]
- rules = remaining_rules
- if not found_something:
- print (new_rules)
- break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement