]> git.friedersdorff.com Git - max/aoc_2022.git/blob - 5.py
Do day 7
[max/aoc_2022.git] / 5.py
1 def move_9000(source, destination, n):
2     for i in range(n):
3         destination.append(source.pop())
4
5
6 def move_9001(source, destination, n):
7     things_to_move = source[-n:]
8     destination.extend(things_to_move)
9
10     for i in range(n):
11         source.pop()
12
13
14 def one():
15     """Figure out which crate is on top"""
16     with open("5.in") as fh:
17         stacks = []
18         for i in range(9):
19             stacks.append([])
20
21         for line in fh:
22             if line.strip() == "":
23                 break
24
25             for stack in range(1, 10):
26                 index = 1 + (stack - 1) * 4
27                 char = line[index]
28                 if char in '1234567890':
29                     break
30
31                 if char != " ":
32                     stacks[stack - 1].append(char)
33
34         for stack in stacks:
35             stack.reverse()
36
37         for line in fh:
38             _, n, __, source, ___, destination = line.split(" ")
39             move_9000(stacks[int(source) - 1], stacks[int(destination) - 1], int(n))
40
41         for stack in stacks:
42             print(stack[-1])
43
44
45 def two():
46     """Figure out which crate is on top"""
47     with open("5.in") as fh:
48         stacks = []
49         for i in range(9):
50             stacks.append([])
51
52         for line in fh:
53             if line.strip() == "":
54                 break
55
56             for stack in range(1, 10):
57                 index = 1 + (stack - 1) * 4
58                 char = line[index]
59                 if char in '1234567890':
60                     break
61
62                 if char != " ":
63                     stacks[stack - 1].append(char)
64
65         for stack in stacks:
66             stack.reverse()
67
68         for line in fh:
69             _, n, __, source, ___, destination = line.split(" ")
70             move_9001(stacks[int(source) - 1], stacks[int(destination) - 1], int(n))
71
72         for stack in stacks:
73             print(stack[-1])
74
75 two()