From dec4fbf16fd57501b5546d1924c3cbc716555821 Mon Sep 17 00:00:00 2001 From: mhsn Date: Tue, 17 Dec 2024 16:25:44 +0000 Subject: 2024-17 python p1 --- 2024/17/python/main.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 2024/17/python/main.py diff --git a/2024/17/python/main.py b/2024/17/python/main.py new file mode 100644 index 0000000..7e8ecb1 --- /dev/null +++ b/2024/17/python/main.py @@ -0,0 +1,77 @@ +from fileinput import input +from itertools import takewhile + +inp = map(str.strip, input()) +regs = {r[1][0]: int(r[2]) for r in (line.split() for line in takewhile(bool, inp))} +prog = [int(o) for o in next(inp).split()[1].split(",")] +out = [] + +ir = 0 +combo = { + 0: lambda: 0, + 1: lambda: 1, + 2: lambda: 2, + 3: lambda: 3, + 4: lambda: regs["A"], + 5: lambda: regs["B"], + 6: lambda: regs["C"], + 7: None, +} + + +def _adv(op): + regs["A"] = regs["A"] >> combo[op]() + + +def _bxl(op): + regs["B"] ^= op + + +def _bst(op): + regs["B"] = combo[op]() & 0b111 + + +def _jnz(op): + global ir + if regs["A"]: + ir = op + ir -= 2 # Undo IR + + +def _bxc(_): + regs["B"] ^= regs["C"] + + +def _out(op): + out.append(combo[op]() & 0b111) + + +def _bdv(op): + regs["B"] = regs["A"] >> combo[op]() + + +def _cdv(op): + regs["C"] = regs["A"] >> combo[op]() + + +instrs = { + 0: _adv, + 1: _bxl, + 2: _bst, + 3: _jnz, + 4: _bxc, + 5: _out, + 6: _bdv, + 7: _cdv, +} + +while ir <= len(prog) - 1: + inst, op = prog[ir], prog[ir + 1] + instrs[inst](op) + ir += 2 + +silver = ",".join(map(str, out)) +gold = 0 + +print("silver:", silver) +print("gold:", gold) -- cgit v1.2.3