24
https://adventofcode.com/2024/day/24
Prob1
python
import sys
from typing import Dict, Tuple, List
values: Dict[str, int] = {}
znames: List[str] = []
source_map: Dict[str, Tuple[str, str, str]] = {}
def get_value(name: str) -> int:
if name in values:
return values[name]
n1, n2, op = source_map[name]
v1 = get_value(n1)
v2 = get_value(n2)
if op == 'XOR':
v = v1^v2
elif op == 'OR':
v = v1|v2
elif op == 'AND':
v = v1&v2
else:
raise RuntimeError('op=' + op)
values[name] = v
return v
for line in sys.stdin:
line = line.strip()
if not line:
continue
if ':' in line:
name, value = line.split(': ')
values[name] = int(value)
if name.startswith('z'):
znames.append(name)
else:
inputs, output = line.split(' -> ')
name1, op, name2 = inputs.split(' ')
source_map[output] = (name1, name2, op)
if name1.startswith('z'):
znames.append(name1)
if name2.startswith('z'):
znames.append(name2)
if output.startswith('z'):
znames.append(output)
znames = reversed(sorted(list(set(znames))))
print(znames, source_map)
ans = 0
for zname in znames:
v = get_value(zname)
ans = (ans << 1) ^ get_value(zname)
print(ans)
Prob2
IDK