2022 day 5

This commit is contained in:
2026-06-08 13:31:37 +02:00
parent e9f5e98787
commit a48f8b3017
+49
View File
@@ -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)