From 101df22f4aa6d43aa3bd98836f5044125cb4215b Mon Sep 17 00:00:00 2001 From: Sijmen Date: Mon, 5 Dec 2022 10:17:50 +0100 Subject: [PATCH] day 5: god save me --- day05.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 day05.py diff --git a/day05.py b/day05.py new file mode 100644 index 0000000..e26daa7 --- /dev/null +++ b/day05.py @@ -0,0 +1,42 @@ +import fileinput +from collections import defaultdict, deque +import re +from copy import deepcopy + +input = fileinput.input() +stacks: list[deque] = [] + +for y, line in enumerate(input): + line = line.rstrip("\n") + if "1" in line: + continue + if not line: + break + + for x in range(0, len(line), 4): + if y == 0: + stacks.append(deque([line[x + 1]] if line[x + 1] != " " else [])) + elif line[x + 1] != " ": + stacks[x // 4].appendleft(line[x + 1]) + +stacks2 = deepcopy(stacks) + +RE = re.compile(r"move (\d+) from (\d+) to (\d+)") +for line in input: + m = RE.match(line) + if not m: + continue + + n, f, t = int(m[1]), int(m[2]), int(m[3]) + + p2stack = [] + for _ in range(n): + c = stacks[f - 1].pop() + stacks[t - 1].append(c) + + c = stacks2[f - 1].pop() + p2stack.append(c) + + stacks2[t - 1].extend(reversed(p2stack)) + +print("".join(s[-1] for s in stacks), "".join(s[-1] for s in stacks2))