def move_9000(source, destination, n): for i in range(n): destination.append(source.pop()) def move_9001(source, destination, n): things_to_move = source[-n:] destination.extend(things_to_move) for i in range(n): source.pop() def one(): """Figure out which crate is on top""" with open("5.in") as fh: stacks = [] for i in range(9): stacks.append([]) for line in fh: if line.strip() == "": break for stack in range(1, 10): index = 1 + (stack - 1) * 4 char = line[index] if char in '1234567890': break if char != " ": stacks[stack - 1].append(char) for stack in stacks: stack.reverse() for line in fh: _, n, __, source, ___, destination = line.split(" ") move_9000(stacks[int(source) - 1], stacks[int(destination) - 1], int(n)) for stack in stacks: print(stack[-1]) def two(): """Figure out which crate is on top""" with open("5.in") as fh: stacks = [] for i in range(9): stacks.append([]) for line in fh: if line.strip() == "": break for stack in range(1, 10): index = 1 + (stack - 1) * 4 char = line[index] if char in '1234567890': break if char != " ": stacks[stack - 1].append(char) for stack in stacks: stack.reverse() for line in fh: _, n, __, source, ___, destination = line.split(" ") move_9001(stacks[int(source) - 1], stacks[int(destination) - 1], int(n)) for stack in stacks: print(stack[-1]) two()