From a48f8b30170ebe43a23e80723d9afaf38934fa27 Mon Sep 17 00:00:00 2001 From: Thibaud Date: Mon, 8 Jun 2026 13:31:37 +0200 Subject: [PATCH] 2022 day 5 --- adventofcode/2022/day5/day5.py | 49 ++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 adventofcode/2022/day5/day5.py diff --git a/adventofcode/2022/day5/day5.py b/adventofcode/2022/day5/day5.py new file mode 100644 index 0000000..050a718 --- /dev/null +++ b/adventofcode/2022/day5/day5.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import fileinput +import re +from collections import defaultdict + + +def parse_data(data): + stacks, commands = defaultdict(list), [] + parsing_stacks = True + for line in data: + if line == "": + parsing_stacks = False + continue + if parsing_stacks: + for i, c in enumerate(line): + if c.isalpha(): + stacks[i].append(c) + else: + commands.append(tuple(int(x) for x in re.findall(r"\d+", line))) + + stacks = [v[::-1] for k, v in sorted(stacks.items())] + return stacks, commands + + +def part1(stacks, commands): + for qty, src, dst in commands: + for _ in range(qty): + x = stacks[src - 1].pop() + stacks[dst - 1].append(x) + return "".join(s[-1] for s in stacks) + + +def part2(stacks, commands): + for qty, src, dst in commands: + stacks[dst - 1] += stacks[src - 1][-qty:] + stacks[src - 1] = stacks[src - 1][:-qty] + return "".join(s[-1] for s in stacks) + + +def main(data): + stacks, commands = parse_data(data) + print("Part 1: ", part1([s[:] for s in stacks], commands)) + print("Part 2: ", part2([s[:] for s in stacks], commands)) + + +if __name__ == "__main__": + with fileinput.input() as f: + data = [x.rstrip() for x in f] + main(data)