Advertisement
Guest User

Untitled

a guest
Dec 24th, 2024
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.48 KB | None | 0 0
  1. # Input: lines like "<code>: <0 or 1>", then blank line,
  2. #        then lines like "<code> (OR/AND/XOR) <code> -> <code>"
  3. # Output: 2^0 * z00 + 2^1 * z01 + ...
  4.  
  5. values = {}
  6. rules = {}
  7. z_values = []
  8.  
  9. found_blank_line = False
  10. file = open("24_input.txt", "r")
  11. for line in file:
  12.   line = line.replace("\n", "")
  13.   if line == "":
  14.     found_blank_line = True
  15.     continue
  16.   if not found_blank_line:
  17.     parts = line.split(": ")
  18.     values[parts[0]] = int(parts[1])
  19.     if parts[0][0] == "z":
  20.       z_values.append(parts[0])
  21.     continue
  22.   parts = line.split(" -> ")
  23.   rules[parts[0]] = parts[1]
  24.   if parts[1][0] == "z":
  25.     z_values.append(parts[1])
  26.  
  27. z_values = list(set(z_values))
  28.  
  29. while True:
  30.   remaining_rules = rules.copy()
  31.   for rule in rules:
  32.     parts = rule.split(" ")
  33.     code1, operand, code2, result = parts[0], parts[1], parts[2], rules[rule]
  34.     if code1 in values and code2 in values:
  35.       if operand == "AND":
  36.         values[result] = values[code1] & values[code2]
  37.       if operand == "OR":
  38.         values[result] = values[code1] | values[code2]
  39.       if operand == "XOR":
  40.         values[result] = values[code1] ^ values[code2]
  41.       del remaining_rules[rule]
  42.   rules = remaining_rules
  43.   got_all_z_values = True
  44.   for z_value in z_values:
  45.     if not (z_value in values):
  46.       got_all_z_values = False
  47.       break
  48.   if got_all_z_values:
  49.     break
  50.  
  51. total = 0
  52. for z_value in z_values:
  53.   if values[z_value] == 1:
  54.     total += 2 ** int(z_value[1:])
  55. print (total)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement