/ Python / 2022 / 05.py
05.py
 1  from lib import *
 2  
 3  input = read_input(2022, 5)
 4  
 5  initial, instructions = input.split("\n\n")
 6  nums, *initial = initial.splitlines()[::-1]
 7  
 8  stacks = [[] for _ in pints(nums)]
 9  for line in initial:
10      for i in range(0, len(line), 4):
11          if line[i + 1] != " ":
12              stacks[i // 4].append(line[i + 1])
13  
14  instructions = [(cnt, i - 1, j - 1) for cnt, i, j in map(pints, instructions.splitlines())]
15  
16  
17  _stacks = deepcopy(stacks)
18  for cnt, i, j in instructions:
19      for _ in range(cnt):
20          stacks[j].append(stacks[i].pop())
21  print("".join(s[-1] for s in stacks))
22  
23  
24  stacks = _stacks
25  for cnt, i, j in instructions:
26      stacks[j] += stacks[i][-cnt:]
27      del stacks[i][-cnt:]
28  print("".join(s[-1] for s in stacks))