Day 5 - Advent of Code 2022

Working solutions for the day 5 puzzles.

Part One

""" day_05_01.py """

# usage: python3 day_05_01.py < input

import sys


crates = []
while scan := input():
    row = [j for i, j in enumerate(scan) if i % 4 == 1]
    crates.append(row)
stacks = {i: [] for i in crates.pop()}
crates.reverse()
for row in crates:
    for i, j in enumerate(row):
        if not j.isspace():
            stacks[str(i + 1)].append(j)

with sys.stdin as pipe:
    for step in pipe:
        _, qty, _, from_stack, _, to_stack = step.strip().split()
        for i in range(int(qty)):
            crate = stacks[from_stack].pop()
            stacks[to_stack].append(crate)
print(''.join([stacks[i].pop() for i in stacks]))

Part Two

""" day_05_02.py """

# usage: python3 day_05_02.py < input

import sys


crates = []
while scan := input():
    row = [j for i, j in enumerate(scan) if i % 4 == 1]
    crates.append(row)
stacks = {i: [] for i in crates.pop()}
crates.reverse()
for row in crates:
    for i, j in enumerate(row):
        if not j.isspace():
            stacks[str(i + 1)].append(j)

with sys.stdin as pipe:
    for step in pipe:
        _, qty, _, from_stack, _, to_stack = step.strip().split()
        move = [stacks[from_stack].pop() for i in range(int(qty))]
        move.reverse()
        stacks[to_stack].extend(move)
print(''.join([stacks[i].pop() for i in stacks]))