Compare commits
4 commits
e190b4dd3b
...
fb66ce49a6
Author | SHA1 | Date | |
---|---|---|---|
Bruno BELANYI | fb66ce49a6 | ||
Bruno BELANYI | 205212f429 | ||
Bruno BELANYI | e77b63a0aa | ||
Bruno BELANYI | 658426b449 |
55
2022/d05/ex1/ex1.py
Executable file
55
2022/d05/ex1/ex1.py
Executable file
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import dataclasses
|
||||
import sys
|
||||
|
||||
Stack = list[str]
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Instruction:
|
||||
n: int
|
||||
start: int
|
||||
end: int
|
||||
|
||||
@classmethod
|
||||
def from_input(cls, input: str) -> "Instruction":
|
||||
words = input.split()
|
||||
return Instruction(int(words[1]), int(words[3]) - 1, int(words[5]) - 1)
|
||||
|
||||
|
||||
def parse(input: list[str]) -> tuple[list[Stack], list[Instruction]]:
|
||||
def parse_stacks(input: list[str]) -> list[Stack]:
|
||||
stacks: list[Stack] = [[] for _ in range(1, len(input[-1]), 4)]
|
||||
for line in reversed(input[:-1]):
|
||||
for stack, i in enumerate(range(1, len(line), 4)):
|
||||
c = line[i]
|
||||
if c == " ":
|
||||
continue
|
||||
stacks[stack].append(c)
|
||||
return stacks
|
||||
|
||||
def parse_instructions(input: list[str]) -> list[Instruction]:
|
||||
return list(map(Instruction.from_input, input))
|
||||
|
||||
empty_line = input.index("")
|
||||
|
||||
return parse_stacks(input[:empty_line]), parse_instructions(input[empty_line + 1 :])
|
||||
|
||||
|
||||
def solve(input: list[str]) -> str:
|
||||
stacks, instructions = parse(input)
|
||||
for instr in instructions:
|
||||
start, end = stacks[instr.start], stacks[instr.end]
|
||||
items = (start.pop() for _ in range(instr.n))
|
||||
end.extend(items)
|
||||
return "".join(stack[-1] for stack in stacks if stack)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read().splitlines()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
512
2022/d05/ex1/input
Normal file
512
2022/d05/ex1/input
Normal file
|
@ -0,0 +1,512 @@
|
|||
[W] [V] [P]
|
||||
[B] [T] [C] [B] [G]
|
||||
[G] [S] [V] [H] [N] [T]
|
||||
[Z] [B] [W] [J] [D] [M] [S]
|
||||
[R] [C] [N] [N] [F] [W] [C] [W]
|
||||
[D] [F] [S] [M] [L] [T] [L] [Z] [Z]
|
||||
[C] [W] [B] [G] [S] [V] [F] [D] [N]
|
||||
[V] [G] [C] [Q] [T] [J] [P] [B] [M]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 2 from 8 to 4
|
||||
move 2 from 7 to 3
|
||||
move 2 from 9 to 2
|
||||
move 4 from 1 to 9
|
||||
move 1 from 7 to 8
|
||||
move 1 from 9 to 6
|
||||
move 6 from 6 to 1
|
||||
move 6 from 1 to 6
|
||||
move 2 from 7 to 1
|
||||
move 9 from 4 to 1
|
||||
move 6 from 2 to 7
|
||||
move 5 from 9 to 7
|
||||
move 7 from 3 to 7
|
||||
move 19 from 7 to 9
|
||||
move 1 from 7 to 1
|
||||
move 3 from 6 to 8
|
||||
move 4 from 5 to 6
|
||||
move 1 from 4 to 1
|
||||
move 2 from 5 to 2
|
||||
move 8 from 9 to 7
|
||||
move 1 from 5 to 1
|
||||
move 3 from 9 to 4
|
||||
move 1 from 4 to 9
|
||||
move 2 from 4 to 7
|
||||
move 1 from 7 to 6
|
||||
move 3 from 8 to 9
|
||||
move 17 from 1 to 7
|
||||
move 21 from 7 to 3
|
||||
move 4 from 6 to 2
|
||||
move 1 from 7 to 2
|
||||
move 8 from 9 to 2
|
||||
move 2 from 8 to 3
|
||||
move 1 from 1 to 7
|
||||
move 2 from 7 to 9
|
||||
move 1 from 6 to 1
|
||||
move 1 from 7 to 4
|
||||
move 1 from 1 to 2
|
||||
move 4 from 6 to 1
|
||||
move 1 from 9 to 2
|
||||
move 1 from 7 to 9
|
||||
move 1 from 4 to 1
|
||||
move 7 from 3 to 7
|
||||
move 6 from 2 to 8
|
||||
move 3 from 3 to 4
|
||||
move 1 from 8 to 4
|
||||
move 12 from 2 to 8
|
||||
move 2 from 9 to 2
|
||||
move 12 from 3 to 2
|
||||
move 12 from 8 to 6
|
||||
move 3 from 4 to 2
|
||||
move 19 from 2 to 8
|
||||
move 4 from 1 to 9
|
||||
move 1 from 3 to 8
|
||||
move 1 from 4 to 6
|
||||
move 1 from 2 to 4
|
||||
move 1 from 6 to 3
|
||||
move 8 from 9 to 6
|
||||
move 1 from 4 to 9
|
||||
move 1 from 3 to 1
|
||||
move 1 from 9 to 5
|
||||
move 11 from 6 to 3
|
||||
move 5 from 8 to 6
|
||||
move 14 from 6 to 9
|
||||
move 2 from 1 to 4
|
||||
move 3 from 8 to 1
|
||||
move 8 from 8 to 4
|
||||
move 3 from 3 to 4
|
||||
move 8 from 3 to 1
|
||||
move 9 from 8 to 2
|
||||
move 12 from 4 to 2
|
||||
move 12 from 9 to 3
|
||||
move 9 from 3 to 4
|
||||
move 1 from 5 to 3
|
||||
move 7 from 7 to 1
|
||||
move 2 from 9 to 1
|
||||
move 2 from 4 to 6
|
||||
move 16 from 2 to 6
|
||||
move 1 from 2 to 8
|
||||
move 10 from 1 to 4
|
||||
move 1 from 8 to 2
|
||||
move 4 from 1 to 6
|
||||
move 15 from 4 to 8
|
||||
move 1 from 4 to 2
|
||||
move 2 from 6 to 8
|
||||
move 5 from 2 to 8
|
||||
move 21 from 8 to 3
|
||||
move 6 from 1 to 3
|
||||
move 15 from 6 to 1
|
||||
move 1 from 2 to 1
|
||||
move 1 from 8 to 9
|
||||
move 15 from 1 to 3
|
||||
move 7 from 3 to 8
|
||||
move 1 from 7 to 9
|
||||
move 2 from 9 to 8
|
||||
move 2 from 3 to 7
|
||||
move 4 from 6 to 1
|
||||
move 2 from 7 to 8
|
||||
move 1 from 6 to 2
|
||||
move 4 from 8 to 3
|
||||
move 2 from 4 to 8
|
||||
move 1 from 2 to 1
|
||||
move 4 from 1 to 5
|
||||
move 3 from 5 to 8
|
||||
move 1 from 5 to 1
|
||||
move 12 from 8 to 3
|
||||
move 3 from 1 to 2
|
||||
move 17 from 3 to 5
|
||||
move 2 from 5 to 3
|
||||
move 15 from 5 to 1
|
||||
move 1 from 1 to 4
|
||||
move 17 from 3 to 2
|
||||
move 5 from 2 to 8
|
||||
move 17 from 3 to 6
|
||||
move 6 from 1 to 3
|
||||
move 5 from 1 to 6
|
||||
move 4 from 8 to 9
|
||||
move 10 from 3 to 8
|
||||
move 7 from 2 to 9
|
||||
move 2 from 6 to 3
|
||||
move 2 from 2 to 8
|
||||
move 1 from 1 to 4
|
||||
move 17 from 6 to 9
|
||||
move 13 from 8 to 2
|
||||
move 2 from 4 to 1
|
||||
move 1 from 6 to 7
|
||||
move 2 from 2 to 4
|
||||
move 8 from 2 to 7
|
||||
move 1 from 6 to 1
|
||||
move 4 from 7 to 9
|
||||
move 1 from 4 to 7
|
||||
move 1 from 4 to 6
|
||||
move 1 from 1 to 7
|
||||
move 5 from 2 to 4
|
||||
move 2 from 3 to 8
|
||||
move 6 from 7 to 1
|
||||
move 1 from 7 to 4
|
||||
move 11 from 9 to 7
|
||||
move 1 from 8 to 4
|
||||
move 8 from 1 to 2
|
||||
move 1 from 1 to 4
|
||||
move 1 from 1 to 9
|
||||
move 1 from 6 to 1
|
||||
move 1 from 8 to 4
|
||||
move 6 from 2 to 3
|
||||
move 1 from 1 to 3
|
||||
move 1 from 6 to 7
|
||||
move 1 from 4 to 6
|
||||
move 6 from 2 to 5
|
||||
move 7 from 3 to 4
|
||||
move 2 from 7 to 6
|
||||
move 2 from 7 to 3
|
||||
move 8 from 7 to 5
|
||||
move 3 from 6 to 7
|
||||
move 1 from 5 to 7
|
||||
move 1 from 7 to 5
|
||||
move 13 from 9 to 3
|
||||
move 1 from 3 to 8
|
||||
move 8 from 4 to 3
|
||||
move 3 from 5 to 1
|
||||
move 7 from 4 to 1
|
||||
move 5 from 1 to 4
|
||||
move 3 from 1 to 4
|
||||
move 2 from 1 to 8
|
||||
move 2 from 7 to 5
|
||||
move 2 from 8 to 9
|
||||
move 1 from 7 to 6
|
||||
move 1 from 8 to 7
|
||||
move 4 from 5 to 1
|
||||
move 1 from 7 to 2
|
||||
move 2 from 1 to 8
|
||||
move 1 from 2 to 1
|
||||
move 5 from 9 to 7
|
||||
move 3 from 9 to 4
|
||||
move 8 from 4 to 8
|
||||
move 6 from 8 to 5
|
||||
move 11 from 5 to 1
|
||||
move 3 from 4 to 2
|
||||
move 9 from 3 to 7
|
||||
move 6 from 7 to 2
|
||||
move 13 from 3 to 2
|
||||
move 3 from 8 to 1
|
||||
move 2 from 2 to 8
|
||||
move 1 from 6 to 7
|
||||
move 3 from 8 to 4
|
||||
move 9 from 1 to 5
|
||||
move 5 from 5 to 8
|
||||
move 2 from 8 to 4
|
||||
move 3 from 9 to 4
|
||||
move 2 from 8 to 2
|
||||
move 8 from 1 to 5
|
||||
move 8 from 7 to 9
|
||||
move 1 from 8 to 3
|
||||
move 15 from 5 to 9
|
||||
move 6 from 4 to 1
|
||||
move 1 from 7 to 2
|
||||
move 4 from 2 to 1
|
||||
move 1 from 3 to 4
|
||||
move 5 from 1 to 7
|
||||
move 3 from 7 to 3
|
||||
move 14 from 9 to 8
|
||||
move 1 from 4 to 8
|
||||
move 1 from 7 to 6
|
||||
move 2 from 4 to 5
|
||||
move 4 from 1 to 5
|
||||
move 1 from 6 to 5
|
||||
move 4 from 9 to 3
|
||||
move 5 from 3 to 7
|
||||
move 4 from 5 to 9
|
||||
move 1 from 3 to 7
|
||||
move 1 from 3 to 2
|
||||
move 4 from 5 to 2
|
||||
move 4 from 7 to 5
|
||||
move 4 from 2 to 1
|
||||
move 1 from 5 to 4
|
||||
move 7 from 9 to 7
|
||||
move 1 from 4 to 2
|
||||
move 1 from 5 to 8
|
||||
move 21 from 2 to 4
|
||||
move 1 from 9 to 8
|
||||
move 1 from 9 to 4
|
||||
move 3 from 4 to 1
|
||||
move 7 from 1 to 6
|
||||
move 1 from 5 to 1
|
||||
move 18 from 4 to 7
|
||||
move 1 from 5 to 8
|
||||
move 27 from 7 to 8
|
||||
move 1 from 7 to 3
|
||||
move 1 from 3 to 7
|
||||
move 1 from 7 to 2
|
||||
move 1 from 2 to 1
|
||||
move 42 from 8 to 9
|
||||
move 1 from 8 to 7
|
||||
move 1 from 8 to 2
|
||||
move 1 from 4 to 6
|
||||
move 1 from 2 to 9
|
||||
move 2 from 1 to 2
|
||||
move 1 from 7 to 3
|
||||
move 7 from 6 to 4
|
||||
move 4 from 9 to 6
|
||||
move 1 from 3 to 2
|
||||
move 1 from 2 to 7
|
||||
move 2 from 2 to 5
|
||||
move 1 from 8 to 4
|
||||
move 1 from 9 to 3
|
||||
move 5 from 4 to 7
|
||||
move 1 from 5 to 6
|
||||
move 1 from 5 to 9
|
||||
move 1 from 6 to 3
|
||||
move 1 from 7 to 5
|
||||
move 2 from 3 to 2
|
||||
move 22 from 9 to 7
|
||||
move 2 from 2 to 3
|
||||
move 18 from 7 to 9
|
||||
move 1 from 4 to 9
|
||||
move 1 from 1 to 4
|
||||
move 4 from 7 to 3
|
||||
move 4 from 3 to 2
|
||||
move 3 from 4 to 5
|
||||
move 1 from 2 to 4
|
||||
move 5 from 6 to 9
|
||||
move 1 from 5 to 3
|
||||
move 1 from 4 to 7
|
||||
move 2 from 5 to 1
|
||||
move 3 from 2 to 4
|
||||
move 1 from 5 to 6
|
||||
move 2 from 7 to 9
|
||||
move 1 from 6 to 8
|
||||
move 2 from 3 to 2
|
||||
move 2 from 4 to 7
|
||||
move 1 from 8 to 7
|
||||
move 1 from 4 to 6
|
||||
move 35 from 9 to 7
|
||||
move 13 from 7 to 3
|
||||
move 1 from 2 to 7
|
||||
move 1 from 2 to 5
|
||||
move 1 from 5 to 8
|
||||
move 1 from 8 to 5
|
||||
move 8 from 7 to 3
|
||||
move 1 from 6 to 4
|
||||
move 6 from 3 to 9
|
||||
move 1 from 1 to 9
|
||||
move 1 from 4 to 1
|
||||
move 14 from 9 to 8
|
||||
move 1 from 5 to 7
|
||||
move 16 from 3 to 2
|
||||
move 2 from 1 to 2
|
||||
move 1 from 9 to 2
|
||||
move 1 from 8 to 1
|
||||
move 1 from 1 to 3
|
||||
move 7 from 2 to 9
|
||||
move 6 from 9 to 8
|
||||
move 1 from 3 to 4
|
||||
move 3 from 7 to 6
|
||||
move 2 from 2 to 1
|
||||
move 1 from 4 to 7
|
||||
move 2 from 2 to 5
|
||||
move 1 from 9 to 6
|
||||
move 2 from 2 to 5
|
||||
move 2 from 6 to 2
|
||||
move 4 from 5 to 4
|
||||
move 5 from 2 to 6
|
||||
move 1 from 1 to 7
|
||||
move 1 from 1 to 2
|
||||
move 13 from 8 to 1
|
||||
move 2 from 8 to 4
|
||||
move 19 from 7 to 4
|
||||
move 3 from 1 to 6
|
||||
move 11 from 4 to 3
|
||||
move 2 from 7 to 9
|
||||
move 4 from 2 to 5
|
||||
move 2 from 9 to 5
|
||||
move 1 from 7 to 4
|
||||
move 2 from 5 to 7
|
||||
move 4 from 3 to 4
|
||||
move 3 from 4 to 1
|
||||
move 3 from 5 to 1
|
||||
move 9 from 6 to 4
|
||||
move 1 from 7 to 9
|
||||
move 1 from 7 to 5
|
||||
move 10 from 1 to 4
|
||||
move 1 from 9 to 6
|
||||
move 1 from 6 to 8
|
||||
move 32 from 4 to 5
|
||||
move 7 from 5 to 4
|
||||
move 27 from 5 to 9
|
||||
move 5 from 3 to 2
|
||||
move 3 from 2 to 8
|
||||
move 1 from 6 to 2
|
||||
move 8 from 4 to 9
|
||||
move 1 from 2 to 9
|
||||
move 8 from 8 to 6
|
||||
move 2 from 4 to 3
|
||||
move 1 from 2 to 3
|
||||
move 15 from 9 to 8
|
||||
move 4 from 1 to 4
|
||||
move 3 from 4 to 8
|
||||
move 6 from 9 to 7
|
||||
move 1 from 4 to 9
|
||||
move 8 from 8 to 2
|
||||
move 2 from 1 to 9
|
||||
move 2 from 7 to 9
|
||||
move 10 from 8 to 3
|
||||
move 6 from 2 to 6
|
||||
move 2 from 3 to 2
|
||||
move 6 from 6 to 3
|
||||
move 1 from 7 to 5
|
||||
move 8 from 3 to 2
|
||||
move 4 from 3 to 2
|
||||
move 1 from 3 to 5
|
||||
move 6 from 6 to 1
|
||||
move 4 from 3 to 7
|
||||
move 2 from 5 to 8
|
||||
move 3 from 7 to 5
|
||||
move 6 from 1 to 7
|
||||
move 1 from 3 to 4
|
||||
move 1 from 3 to 9
|
||||
move 10 from 7 to 4
|
||||
move 8 from 2 to 8
|
||||
move 11 from 9 to 5
|
||||
move 11 from 4 to 1
|
||||
move 5 from 2 to 6
|
||||
move 3 from 2 to 7
|
||||
move 11 from 1 to 6
|
||||
move 1 from 5 to 6
|
||||
move 8 from 5 to 4
|
||||
move 19 from 6 to 7
|
||||
move 3 from 7 to 9
|
||||
move 3 from 5 to 4
|
||||
move 1 from 2 to 5
|
||||
move 3 from 5 to 7
|
||||
move 8 from 9 to 6
|
||||
move 2 from 4 to 1
|
||||
move 1 from 1 to 9
|
||||
move 2 from 9 to 7
|
||||
move 6 from 6 to 2
|
||||
move 2 from 4 to 6
|
||||
move 4 from 8 to 6
|
||||
move 1 from 8 to 1
|
||||
move 7 from 6 to 7
|
||||
move 1 from 9 to 4
|
||||
move 5 from 8 to 4
|
||||
move 3 from 2 to 6
|
||||
move 4 from 6 to 4
|
||||
move 2 from 9 to 6
|
||||
move 3 from 2 to 9
|
||||
move 16 from 4 to 8
|
||||
move 1 from 6 to 8
|
||||
move 2 from 9 to 5
|
||||
move 1 from 9 to 7
|
||||
move 2 from 5 to 2
|
||||
move 1 from 4 to 6
|
||||
move 2 from 2 to 5
|
||||
move 1 from 9 to 6
|
||||
move 3 from 7 to 3
|
||||
move 7 from 7 to 8
|
||||
move 2 from 7 to 1
|
||||
move 3 from 8 to 5
|
||||
move 3 from 6 to 2
|
||||
move 4 from 7 to 4
|
||||
move 1 from 5 to 1
|
||||
move 1 from 5 to 7
|
||||
move 3 from 3 to 4
|
||||
move 5 from 1 to 4
|
||||
move 16 from 7 to 2
|
||||
move 5 from 4 to 7
|
||||
move 19 from 8 to 1
|
||||
move 11 from 2 to 9
|
||||
move 11 from 9 to 6
|
||||
move 2 from 1 to 6
|
||||
move 2 from 4 to 1
|
||||
move 5 from 4 to 6
|
||||
move 1 from 5 to 9
|
||||
move 1 from 9 to 6
|
||||
move 2 from 2 to 6
|
||||
move 1 from 5 to 4
|
||||
move 8 from 6 to 5
|
||||
move 16 from 1 to 6
|
||||
move 1 from 4 to 9
|
||||
move 3 from 2 to 9
|
||||
move 2 from 2 to 5
|
||||
move 2 from 5 to 8
|
||||
move 4 from 8 to 4
|
||||
move 4 from 9 to 7
|
||||
move 2 from 1 to 3
|
||||
move 5 from 6 to 4
|
||||
move 21 from 6 to 2
|
||||
move 9 from 7 to 3
|
||||
move 1 from 1 to 2
|
||||
move 1 from 5 to 3
|
||||
move 23 from 2 to 7
|
||||
move 1 from 7 to 5
|
||||
move 3 from 6 to 1
|
||||
move 9 from 4 to 5
|
||||
move 11 from 7 to 1
|
||||
move 2 from 3 to 4
|
||||
move 1 from 3 to 7
|
||||
move 1 from 4 to 1
|
||||
move 10 from 1 to 6
|
||||
move 5 from 7 to 1
|
||||
move 3 from 1 to 4
|
||||
move 7 from 1 to 7
|
||||
move 4 from 3 to 8
|
||||
move 4 from 7 to 4
|
||||
move 5 from 7 to 3
|
||||
move 2 from 4 to 9
|
||||
move 1 from 8 to 1
|
||||
move 4 from 4 to 1
|
||||
move 1 from 6 to 1
|
||||
move 1 from 6 to 5
|
||||
move 16 from 5 to 1
|
||||
move 2 from 5 to 7
|
||||
move 1 from 5 to 6
|
||||
move 2 from 8 to 2
|
||||
move 1 from 7 to 9
|
||||
move 3 from 9 to 5
|
||||
move 2 from 5 to 4
|
||||
move 6 from 7 to 1
|
||||
move 3 from 4 to 7
|
||||
move 1 from 8 to 6
|
||||
move 5 from 1 to 4
|
||||
move 1 from 6 to 1
|
||||
move 19 from 1 to 5
|
||||
move 1 from 7 to 6
|
||||
move 9 from 3 to 1
|
||||
move 6 from 6 to 5
|
||||
move 4 from 6 to 9
|
||||
move 3 from 9 to 4
|
||||
move 13 from 1 to 4
|
||||
move 1 from 3 to 1
|
||||
move 2 from 5 to 1
|
||||
move 1 from 2 to 3
|
||||
move 1 from 3 to 9
|
||||
move 4 from 5 to 4
|
||||
move 1 from 2 to 3
|
||||
move 1 from 3 to 5
|
||||
move 1 from 9 to 1
|
||||
move 1 from 9 to 5
|
||||
move 19 from 4 to 7
|
||||
move 4 from 1 to 6
|
||||
move 5 from 4 to 3
|
||||
move 3 from 6 to 1
|
||||
move 1 from 6 to 8
|
||||
move 2 from 1 to 6
|
||||
move 2 from 1 to 7
|
||||
move 2 from 6 to 3
|
||||
move 2 from 3 to 1
|
||||
move 8 from 7 to 6
|
||||
move 5 from 3 to 9
|
||||
move 2 from 4 to 9
|
||||
move 2 from 6 to 8
|
||||
move 10 from 7 to 2
|
||||
move 7 from 2 to 9
|
||||
move 1 from 8 to 9
|
||||
move 1 from 1 to 2
|
||||
move 2 from 9 to 3
|
||||
move 2 from 8 to 7
|
||||
move 1 from 1 to 6
|
||||
move 1 from 2 to 8
|
||||
move 2 from 2 to 5
|
||||
move 4 from 5 to 7
|
||||
move 5 from 6 to 1
|
||||
move 1 from 3 to 4
|
56
2022/d05/ex2/ex2.py
Executable file
56
2022/d05/ex2/ex2.py
Executable file
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import dataclasses
|
||||
import sys
|
||||
|
||||
Stack = list[str]
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Instruction:
|
||||
n: int
|
||||
start: int
|
||||
end: int
|
||||
|
||||
@classmethod
|
||||
def from_input(cls, input: str) -> "Instruction":
|
||||
words = input.split()
|
||||
return Instruction(int(words[1]), int(words[3]) - 1, int(words[5]) - 1)
|
||||
|
||||
|
||||
def parse(input: list[str]) -> tuple[list[Stack], list[Instruction]]:
|
||||
def parse_stacks(input: list[str]) -> list[Stack]:
|
||||
stacks: list[Stack] = [[] for _ in range(1, len(input[-1]), 4)]
|
||||
for line in reversed(input[:-1]):
|
||||
for stack, i in enumerate(range(1, len(line), 4)):
|
||||
c = line[i]
|
||||
if c == " ":
|
||||
continue
|
||||
stacks[stack].append(c)
|
||||
return stacks
|
||||
|
||||
def parse_instructions(input: list[str]) -> list[Instruction]:
|
||||
return list(map(Instruction.from_input, input))
|
||||
|
||||
empty_line = input.index("")
|
||||
|
||||
return parse_stacks(input[:empty_line]), parse_instructions(input[empty_line + 1 :])
|
||||
|
||||
|
||||
def solve(input: list[str]) -> str:
|
||||
stacks, instructions = parse(input)
|
||||
for instr in instructions:
|
||||
start, end = stacks[instr.start], stacks[instr.end]
|
||||
items = [start.pop() for _ in range(instr.n)]
|
||||
items.reverse()
|
||||
end.extend(items)
|
||||
return "".join(stack[-1] for stack in stacks if stack)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
input = sys.stdin.read().splitlines()
|
||||
print(solve(input))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
512
2022/d05/ex2/input
Normal file
512
2022/d05/ex2/input
Normal file
|
@ -0,0 +1,512 @@
|
|||
[W] [V] [P]
|
||||
[B] [T] [C] [B] [G]
|
||||
[G] [S] [V] [H] [N] [T]
|
||||
[Z] [B] [W] [J] [D] [M] [S]
|
||||
[R] [C] [N] [N] [F] [W] [C] [W]
|
||||
[D] [F] [S] [M] [L] [T] [L] [Z] [Z]
|
||||
[C] [W] [B] [G] [S] [V] [F] [D] [N]
|
||||
[V] [G] [C] [Q] [T] [J] [P] [B] [M]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 2 from 8 to 4
|
||||
move 2 from 7 to 3
|
||||
move 2 from 9 to 2
|
||||
move 4 from 1 to 9
|
||||
move 1 from 7 to 8
|
||||
move 1 from 9 to 6
|
||||
move 6 from 6 to 1
|
||||
move 6 from 1 to 6
|
||||
move 2 from 7 to 1
|
||||
move 9 from 4 to 1
|
||||
move 6 from 2 to 7
|
||||
move 5 from 9 to 7
|
||||
move 7 from 3 to 7
|
||||
move 19 from 7 to 9
|
||||
move 1 from 7 to 1
|
||||
move 3 from 6 to 8
|
||||
move 4 from 5 to 6
|
||||
move 1 from 4 to 1
|
||||
move 2 from 5 to 2
|
||||
move 8 from 9 to 7
|
||||
move 1 from 5 to 1
|
||||
move 3 from 9 to 4
|
||||
move 1 from 4 to 9
|
||||
move 2 from 4 to 7
|
||||
move 1 from 7 to 6
|
||||
move 3 from 8 to 9
|
||||
move 17 from 1 to 7
|
||||
move 21 from 7 to 3
|
||||
move 4 from 6 to 2
|
||||
move 1 from 7 to 2
|
||||
move 8 from 9 to 2
|
||||
move 2 from 8 to 3
|
||||
move 1 from 1 to 7
|
||||
move 2 from 7 to 9
|
||||
move 1 from 6 to 1
|
||||
move 1 from 7 to 4
|
||||
move 1 from 1 to 2
|
||||
move 4 from 6 to 1
|
||||
move 1 from 9 to 2
|
||||
move 1 from 7 to 9
|
||||
move 1 from 4 to 1
|
||||
move 7 from 3 to 7
|
||||
move 6 from 2 to 8
|
||||
move 3 from 3 to 4
|
||||
move 1 from 8 to 4
|
||||
move 12 from 2 to 8
|
||||
move 2 from 9 to 2
|
||||
move 12 from 3 to 2
|
||||
move 12 from 8 to 6
|
||||
move 3 from 4 to 2
|
||||
move 19 from 2 to 8
|
||||
move 4 from 1 to 9
|
||||
move 1 from 3 to 8
|
||||
move 1 from 4 to 6
|
||||
move 1 from 2 to 4
|
||||
move 1 from 6 to 3
|
||||
move 8 from 9 to 6
|
||||
move 1 from 4 to 9
|
||||
move 1 from 3 to 1
|
||||
move 1 from 9 to 5
|
||||
move 11 from 6 to 3
|
||||
move 5 from 8 to 6
|
||||
move 14 from 6 to 9
|
||||
move 2 from 1 to 4
|
||||
move 3 from 8 to 1
|
||||
move 8 from 8 to 4
|
||||
move 3 from 3 to 4
|
||||
move 8 from 3 to 1
|
||||
move 9 from 8 to 2
|
||||
move 12 from 4 to 2
|
||||
move 12 from 9 to 3
|
||||
move 9 from 3 to 4
|
||||
move 1 from 5 to 3
|
||||
move 7 from 7 to 1
|
||||
move 2 from 9 to 1
|
||||
move 2 from 4 to 6
|
||||
move 16 from 2 to 6
|
||||
move 1 from 2 to 8
|
||||
move 10 from 1 to 4
|
||||
move 1 from 8 to 2
|
||||
move 4 from 1 to 6
|
||||
move 15 from 4 to 8
|
||||
move 1 from 4 to 2
|
||||
move 2 from 6 to 8
|
||||
move 5 from 2 to 8
|
||||
move 21 from 8 to 3
|
||||
move 6 from 1 to 3
|
||||
move 15 from 6 to 1
|
||||
move 1 from 2 to 1
|
||||
move 1 from 8 to 9
|
||||
move 15 from 1 to 3
|
||||
move 7 from 3 to 8
|
||||
move 1 from 7 to 9
|
||||
move 2 from 9 to 8
|
||||
move 2 from 3 to 7
|
||||
move 4 from 6 to 1
|
||||
move 2 from 7 to 8
|
||||
move 1 from 6 to 2
|
||||
move 4 from 8 to 3
|
||||
move 2 from 4 to 8
|
||||
move 1 from 2 to 1
|
||||
move 4 from 1 to 5
|
||||
move 3 from 5 to 8
|
||||
move 1 from 5 to 1
|
||||
move 12 from 8 to 3
|
||||
move 3 from 1 to 2
|
||||
move 17 from 3 to 5
|
||||
move 2 from 5 to 3
|
||||
move 15 from 5 to 1
|
||||
move 1 from 1 to 4
|
||||
move 17 from 3 to 2
|
||||
move 5 from 2 to 8
|
||||
move 17 from 3 to 6
|
||||
move 6 from 1 to 3
|
||||
move 5 from 1 to 6
|
||||
move 4 from 8 to 9
|
||||
move 10 from 3 to 8
|
||||
move 7 from 2 to 9
|
||||
move 2 from 6 to 3
|
||||
move 2 from 2 to 8
|
||||
move 1 from 1 to 4
|
||||
move 17 from 6 to 9
|
||||
move 13 from 8 to 2
|
||||
move 2 from 4 to 1
|
||||
move 1 from 6 to 7
|
||||
move 2 from 2 to 4
|
||||
move 8 from 2 to 7
|
||||
move 1 from 6 to 1
|
||||
move 4 from 7 to 9
|
||||
move 1 from 4 to 7
|
||||
move 1 from 4 to 6
|
||||
move 1 from 1 to 7
|
||||
move 5 from 2 to 4
|
||||
move 2 from 3 to 8
|
||||
move 6 from 7 to 1
|
||||
move 1 from 7 to 4
|
||||
move 11 from 9 to 7
|
||||
move 1 from 8 to 4
|
||||
move 8 from 1 to 2
|
||||
move 1 from 1 to 4
|
||||
move 1 from 1 to 9
|
||||
move 1 from 6 to 1
|
||||
move 1 from 8 to 4
|
||||
move 6 from 2 to 3
|
||||
move 1 from 1 to 3
|
||||
move 1 from 6 to 7
|
||||
move 1 from 4 to 6
|
||||
move 6 from 2 to 5
|
||||
move 7 from 3 to 4
|
||||
move 2 from 7 to 6
|
||||
move 2 from 7 to 3
|
||||
move 8 from 7 to 5
|
||||
move 3 from 6 to 7
|
||||
move 1 from 5 to 7
|
||||
move 1 from 7 to 5
|
||||
move 13 from 9 to 3
|
||||
move 1 from 3 to 8
|
||||
move 8 from 4 to 3
|
||||
move 3 from 5 to 1
|
||||
move 7 from 4 to 1
|
||||
move 5 from 1 to 4
|
||||
move 3 from 1 to 4
|
||||
move 2 from 1 to 8
|
||||
move 2 from 7 to 5
|
||||
move 2 from 8 to 9
|
||||
move 1 from 7 to 6
|
||||
move 1 from 8 to 7
|
||||
move 4 from 5 to 1
|
||||
move 1 from 7 to 2
|
||||
move 2 from 1 to 8
|
||||
move 1 from 2 to 1
|
||||
move 5 from 9 to 7
|
||||
move 3 from 9 to 4
|
||||
move 8 from 4 to 8
|
||||
move 6 from 8 to 5
|
||||
move 11 from 5 to 1
|
||||
move 3 from 4 to 2
|
||||
move 9 from 3 to 7
|
||||
move 6 from 7 to 2
|
||||
move 13 from 3 to 2
|
||||
move 3 from 8 to 1
|
||||
move 2 from 2 to 8
|
||||
move 1 from 6 to 7
|
||||
move 3 from 8 to 4
|
||||
move 9 from 1 to 5
|
||||
move 5 from 5 to 8
|
||||
move 2 from 8 to 4
|
||||
move 3 from 9 to 4
|
||||
move 2 from 8 to 2
|
||||
move 8 from 1 to 5
|
||||
move 8 from 7 to 9
|
||||
move 1 from 8 to 3
|
||||
move 15 from 5 to 9
|
||||
move 6 from 4 to 1
|
||||
move 1 from 7 to 2
|
||||
move 4 from 2 to 1
|
||||
move 1 from 3 to 4
|
||||
move 5 from 1 to 7
|
||||
move 3 from 7 to 3
|
||||
move 14 from 9 to 8
|
||||
move 1 from 4 to 8
|
||||
move 1 from 7 to 6
|
||||
move 2 from 4 to 5
|
||||
move 4 from 1 to 5
|
||||
move 1 from 6 to 5
|
||||
move 4 from 9 to 3
|
||||
move 5 from 3 to 7
|
||||
move 4 from 5 to 9
|
||||
move 1 from 3 to 7
|
||||
move 1 from 3 to 2
|
||||
move 4 from 5 to 2
|
||||
move 4 from 7 to 5
|
||||
move 4 from 2 to 1
|
||||
move 1 from 5 to 4
|
||||
move 7 from 9 to 7
|
||||
move 1 from 4 to 2
|
||||
move 1 from 5 to 8
|
||||
move 21 from 2 to 4
|
||||
move 1 from 9 to 8
|
||||
move 1 from 9 to 4
|
||||
move 3 from 4 to 1
|
||||
move 7 from 1 to 6
|
||||
move 1 from 5 to 1
|
||||
move 18 from 4 to 7
|
||||
move 1 from 5 to 8
|
||||
move 27 from 7 to 8
|
||||
move 1 from 7 to 3
|
||||
move 1 from 3 to 7
|
||||
move 1 from 7 to 2
|
||||
move 1 from 2 to 1
|
||||
move 42 from 8 to 9
|
||||
move 1 from 8 to 7
|
||||
move 1 from 8 to 2
|
||||
move 1 from 4 to 6
|
||||
move 1 from 2 to 9
|
||||
move 2 from 1 to 2
|
||||
move 1 from 7 to 3
|
||||
move 7 from 6 to 4
|
||||
move 4 from 9 to 6
|
||||
move 1 from 3 to 2
|
||||
move 1 from 2 to 7
|
||||
move 2 from 2 to 5
|
||||
move 1 from 8 to 4
|
||||
move 1 from 9 to 3
|
||||
move 5 from 4 to 7
|
||||
move 1 from 5 to 6
|
||||
move 1 from 5 to 9
|
||||
move 1 from 6 to 3
|
||||
move 1 from 7 to 5
|
||||
move 2 from 3 to 2
|
||||
move 22 from 9 to 7
|
||||
move 2 from 2 to 3
|
||||
move 18 from 7 to 9
|
||||
move 1 from 4 to 9
|
||||
move 1 from 1 to 4
|
||||
move 4 from 7 to 3
|
||||
move 4 from 3 to 2
|
||||
move 3 from 4 to 5
|
||||
move 1 from 2 to 4
|
||||
move 5 from 6 to 9
|
||||
move 1 from 5 to 3
|
||||
move 1 from 4 to 7
|
||||
move 2 from 5 to 1
|
||||
move 3 from 2 to 4
|
||||
move 1 from 5 to 6
|
||||
move 2 from 7 to 9
|
||||
move 1 from 6 to 8
|
||||
move 2 from 3 to 2
|
||||
move 2 from 4 to 7
|
||||
move 1 from 8 to 7
|
||||
move 1 from 4 to 6
|
||||
move 35 from 9 to 7
|
||||
move 13 from 7 to 3
|
||||
move 1 from 2 to 7
|
||||
move 1 from 2 to 5
|
||||
move 1 from 5 to 8
|
||||
move 1 from 8 to 5
|
||||
move 8 from 7 to 3
|
||||
move 1 from 6 to 4
|
||||
move 6 from 3 to 9
|
||||
move 1 from 1 to 9
|
||||
move 1 from 4 to 1
|
||||
move 14 from 9 to 8
|
||||
move 1 from 5 to 7
|
||||
move 16 from 3 to 2
|
||||
move 2 from 1 to 2
|
||||
move 1 from 9 to 2
|
||||
move 1 from 8 to 1
|
||||
move 1 from 1 to 3
|
||||
move 7 from 2 to 9
|
||||
move 6 from 9 to 8
|
||||
move 1 from 3 to 4
|
||||
move 3 from 7 to 6
|
||||
move 2 from 2 to 1
|
||||
move 1 from 4 to 7
|
||||
move 2 from 2 to 5
|
||||
move 1 from 9 to 6
|
||||
move 2 from 2 to 5
|
||||
move 2 from 6 to 2
|
||||
move 4 from 5 to 4
|
||||
move 5 from 2 to 6
|
||||
move 1 from 1 to 7
|
||||
move 1 from 1 to 2
|
||||
move 13 from 8 to 1
|
||||
move 2 from 8 to 4
|
||||
move 19 from 7 to 4
|
||||
move 3 from 1 to 6
|
||||
move 11 from 4 to 3
|
||||
move 2 from 7 to 9
|
||||
move 4 from 2 to 5
|
||||
move 2 from 9 to 5
|
||||
move 1 from 7 to 4
|
||||
move 2 from 5 to 7
|
||||
move 4 from 3 to 4
|
||||
move 3 from 4 to 1
|
||||
move 3 from 5 to 1
|
||||
move 9 from 6 to 4
|
||||
move 1 from 7 to 9
|
||||
move 1 from 7 to 5
|
||||
move 10 from 1 to 4
|
||||
move 1 from 9 to 6
|
||||
move 1 from 6 to 8
|
||||
move 32 from 4 to 5
|
||||
move 7 from 5 to 4
|
||||
move 27 from 5 to 9
|
||||
move 5 from 3 to 2
|
||||
move 3 from 2 to 8
|
||||
move 1 from 6 to 2
|
||||
move 8 from 4 to 9
|
||||
move 1 from 2 to 9
|
||||
move 8 from 8 to 6
|
||||
move 2 from 4 to 3
|
||||
move 1 from 2 to 3
|
||||
move 15 from 9 to 8
|
||||
move 4 from 1 to 4
|
||||
move 3 from 4 to 8
|
||||
move 6 from 9 to 7
|
||||
move 1 from 4 to 9
|
||||
move 8 from 8 to 2
|
||||
move 2 from 1 to 9
|
||||
move 2 from 7 to 9
|
||||
move 10 from 8 to 3
|
||||
move 6 from 2 to 6
|
||||
move 2 from 3 to 2
|
||||
move 6 from 6 to 3
|
||||
move 1 from 7 to 5
|
||||
move 8 from 3 to 2
|
||||
move 4 from 3 to 2
|
||||
move 1 from 3 to 5
|
||||
move 6 from 6 to 1
|
||||
move 4 from 3 to 7
|
||||
move 2 from 5 to 8
|
||||
move 3 from 7 to 5
|
||||
move 6 from 1 to 7
|
||||
move 1 from 3 to 4
|
||||
move 1 from 3 to 9
|
||||
move 10 from 7 to 4
|
||||
move 8 from 2 to 8
|
||||
move 11 from 9 to 5
|
||||
move 11 from 4 to 1
|
||||
move 5 from 2 to 6
|
||||
move 3 from 2 to 7
|
||||
move 11 from 1 to 6
|
||||
move 1 from 5 to 6
|
||||
move 8 from 5 to 4
|
||||
move 19 from 6 to 7
|
||||
move 3 from 7 to 9
|
||||
move 3 from 5 to 4
|
||||
move 1 from 2 to 5
|
||||
move 3 from 5 to 7
|
||||
move 8 from 9 to 6
|
||||
move 2 from 4 to 1
|
||||
move 1 from 1 to 9
|
||||
move 2 from 9 to 7
|
||||
move 6 from 6 to 2
|
||||
move 2 from 4 to 6
|
||||
move 4 from 8 to 6
|
||||
move 1 from 8 to 1
|
||||
move 7 from 6 to 7
|
||||
move 1 from 9 to 4
|
||||
move 5 from 8 to 4
|
||||
move 3 from 2 to 6
|
||||
move 4 from 6 to 4
|
||||
move 2 from 9 to 6
|
||||
move 3 from 2 to 9
|
||||
move 16 from 4 to 8
|
||||
move 1 from 6 to 8
|
||||
move 2 from 9 to 5
|
||||
move 1 from 9 to 7
|
||||
move 2 from 5 to 2
|
||||
move 1 from 4 to 6
|
||||
move 2 from 2 to 5
|
||||
move 1 from 9 to 6
|
||||
move 3 from 7 to 3
|
||||
move 7 from 7 to 8
|
||||
move 2 from 7 to 1
|
||||
move 3 from 8 to 5
|
||||
move 3 from 6 to 2
|
||||
move 4 from 7 to 4
|
||||
move 1 from 5 to 1
|
||||
move 1 from 5 to 7
|
||||
move 3 from 3 to 4
|
||||
move 5 from 1 to 4
|
||||
move 16 from 7 to 2
|
||||
move 5 from 4 to 7
|
||||
move 19 from 8 to 1
|
||||
move 11 from 2 to 9
|
||||
move 11 from 9 to 6
|
||||
move 2 from 1 to 6
|
||||
move 2 from 4 to 1
|
||||
move 5 from 4 to 6
|
||||
move 1 from 5 to 9
|
||||
move 1 from 9 to 6
|
||||
move 2 from 2 to 6
|
||||
move 1 from 5 to 4
|
||||
move 8 from 6 to 5
|
||||
move 16 from 1 to 6
|
||||
move 1 from 4 to 9
|
||||
move 3 from 2 to 9
|
||||
move 2 from 2 to 5
|
||||
move 2 from 5 to 8
|
||||
move 4 from 8 to 4
|
||||
move 4 from 9 to 7
|
||||
move 2 from 1 to 3
|
||||
move 5 from 6 to 4
|
||||
move 21 from 6 to 2
|
||||
move 9 from 7 to 3
|
||||
move 1 from 1 to 2
|
||||
move 1 from 5 to 3
|
||||
move 23 from 2 to 7
|
||||
move 1 from 7 to 5
|
||||
move 3 from 6 to 1
|
||||
move 9 from 4 to 5
|
||||
move 11 from 7 to 1
|
||||
move 2 from 3 to 4
|
||||
move 1 from 3 to 7
|
||||
move 1 from 4 to 1
|
||||
move 10 from 1 to 6
|
||||
move 5 from 7 to 1
|
||||
move 3 from 1 to 4
|
||||
move 7 from 1 to 7
|
||||
move 4 from 3 to 8
|
||||
move 4 from 7 to 4
|
||||
move 5 from 7 to 3
|
||||
move 2 from 4 to 9
|
||||
move 1 from 8 to 1
|
||||
move 4 from 4 to 1
|
||||
move 1 from 6 to 1
|
||||
move 1 from 6 to 5
|
||||
move 16 from 5 to 1
|
||||
move 2 from 5 to 7
|
||||
move 1 from 5 to 6
|
||||
move 2 from 8 to 2
|
||||
move 1 from 7 to 9
|
||||
move 3 from 9 to 5
|
||||
move 2 from 5 to 4
|
||||
move 6 from 7 to 1
|
||||
move 3 from 4 to 7
|
||||
move 1 from 8 to 6
|
||||
move 5 from 1 to 4
|
||||
move 1 from 6 to 1
|
||||
move 19 from 1 to 5
|
||||
move 1 from 7 to 6
|
||||
move 9 from 3 to 1
|
||||
move 6 from 6 to 5
|
||||
move 4 from 6 to 9
|
||||
move 3 from 9 to 4
|
||||
move 13 from 1 to 4
|
||||
move 1 from 3 to 1
|
||||
move 2 from 5 to 1
|
||||
move 1 from 2 to 3
|
||||
move 1 from 3 to 9
|
||||
move 4 from 5 to 4
|
||||
move 1 from 2 to 3
|
||||
move 1 from 3 to 5
|
||||
move 1 from 9 to 1
|
||||
move 1 from 9 to 5
|
||||
move 19 from 4 to 7
|
||||
move 4 from 1 to 6
|
||||
move 5 from 4 to 3
|
||||
move 3 from 6 to 1
|
||||
move 1 from 6 to 8
|
||||
move 2 from 1 to 6
|
||||
move 2 from 1 to 7
|
||||
move 2 from 6 to 3
|
||||
move 2 from 3 to 1
|
||||
move 8 from 7 to 6
|
||||
move 5 from 3 to 9
|
||||
move 2 from 4 to 9
|
||||
move 2 from 6 to 8
|
||||
move 10 from 7 to 2
|
||||
move 7 from 2 to 9
|
||||
move 1 from 8 to 9
|
||||
move 1 from 1 to 2
|
||||
move 2 from 9 to 3
|
||||
move 2 from 8 to 7
|
||||
move 1 from 1 to 6
|
||||
move 1 from 2 to 8
|
||||
move 2 from 2 to 5
|
||||
move 4 from 5 to 7
|
||||
move 5 from 6 to 1
|
||||
move 1 from 3 to 4
|
Loading…
Reference in a new issue