Skip to content

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

Changelog

Just observe 👀