From cb035697947724a9e927b5fd5bca453a8d6b9ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Engl=C3=B6f=20Ytterstr=C3=B6m?= Date: Sun, 23 Nov 2025 18:39:14 +0100 Subject: [PATCH] Solve 2022 day 5 pt 1-2 Important not to strip trailing whitespace from this one :) --- 2022-python/output/day_05.py | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 2022-python/output/day_05.py diff --git a/2022-python/output/day_05.py b/2022-python/output/day_05.py new file mode 100644 index 0000000..df13fd1 --- /dev/null +++ b/2022-python/output/day_05.py @@ -0,0 +1,46 @@ +from copy import deepcopy +from collections import defaultdict + +from output import ints + + +def solve(data): + state, program = data.split("\n\n") + labels, *state = state.splitlines()[::-1] + num = max(ints(labels)) + stacks = defaultdict(list) + for r, text in enumerate(state): + for c in range(4 * num): + if c % 4 == 1: + if text[c] != " ": + stacks[c // 4 + 1].append(text[c]) + p1 = _act(program, deepcopy(stacks)) + p2 = _act(program, deepcopy(stacks), r=9001) + return p1, p2 + + +def _act(program, stacks, r=9000): + for line in program.splitlines(): + count, old, new = ints(line) + match r: + case 9000: + for _ in range(count): + if stacks[old]: + stacks[new].append(stacks[old].pop()) + case 9001: + stacks[new] += stacks[old][-count:] + stacks[old] = stacks[old][:-count] + return "".join(s[-1] for s in stacks.values()) + + +if __name__ == "__main__": + with open("./input/05.txt", "r") as f: + inp = f.read() + + p1, p2 = solve(inp) + + print(p1) + print(p2) + + assert p1 == "ZRLJGSCTR" + assert p2 == "PRTTGRFPB"