diff --git a/2022/day5/day5.py b/2022/day5/day5.py new file mode 100644 index 0000000..fddce80 --- /dev/null +++ b/2022/day5/day5.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 + + +def cargo(): + with open("./day5.txt", "r") as f: + lines = [l.replace("\n", "") for l in f.readlines()] + stack = lines[:8] + moves = lines[10:] + + crates = {} + for i in range(1, 10): + crates[i] = [] + for s in reversed(stack): + c = s[1 + 4 * (i - 1)] + if c == " ": + break + crates[i].append(c) + return {"crates": crates, "moves": moves} + + +def puzzle1(): + c = cargo() + moves = c["moves"] + crates = c["crates"] + for move in moves: + s = move.split() + loop = int(s[1]) + stack_in = int(s[3]) + stack_out = int(s[5]) + for i in range(loop): + c = crates[stack_in].pop() + crates[stack_out].append(c) + return "".join([v[-1] for v in crates.values()]) + + +def puzzle2(): + c = cargo() + moves = c["moves"] + crates = c["crates"] + for move in moves: + s = move.split() + nb = int(s[1]) + stack_in = int(s[3]) + stack_out = int(s[5]) + c = crates[stack_in][-nb:] + del crates[stack_in][-nb:] + crates[stack_out] += c + return "".join([v[-1] for v in crates.values()]) + + +if __name__ == "__main__": + print("> Day 5") + print("Puzzle 1 answer : %s" % puzzle1()) + print("Puzzle 2 answer : %s" % puzzle2()) diff --git a/2022/day5/day5.txt b/2022/day5/day5.txt new file mode 100644 index 0000000..b401f42 --- /dev/null +++ b/2022/day5/day5.txt @@ -0,0 +1,513 @@ + [Q] [G] [M] + [B] [S] [V] [P] [R] + [T] [C] [F] [L] [V] [N] +[Q] [P] [H] [N] [S] [W] [C] +[F] [G] [B] [J] [B] [N] [Z] [L] +[L] [Q] [Q] [Z] [M] [Q] [F] [G] [D] +[S] [Z] [M] [G] [H] [C] [C] [H] [Z] +[R] [N] [S] [T] [P] [P] [W] [Q] [G] + 1 2 3 4 5 6 7 8 9 + +move 1 from 2 to 6 +move 3 from 7 to 9 +move 7 from 9 to 4 +move 2 from 5 to 3 +move 3 from 2 to 8 +move 14 from 4 to 5 +move 1 from 2 to 1 +move 1 from 2 to 3 +move 3 from 6 to 8 +move 3 from 6 to 9 +move 1 from 4 to 6 +move 5 from 9 to 8 +move 9 from 8 to 9 +move 3 from 3 to 8 +move 8 from 9 to 4 +move 2 from 1 to 7 +move 4 from 1 to 5 +move 2 from 7 to 1 +move 1 from 9 to 6 +move 7 from 4 to 7 +move 1 from 8 to 4 +move 1 from 9 to 8 +move 2 from 6 to 7 +move 7 from 7 to 3 +move 10 from 3 to 1 +move 1 from 3 to 2 +move 1 from 2 to 9 +move 1 from 9 to 8 +move 15 from 5 to 8 +move 1 from 6 to 9 +move 2 from 7 to 3 +move 11 from 1 to 8 +move 1 from 9 to 8 +move 1 from 1 to 5 +move 3 from 5 to 2 +move 2 from 6 to 9 +move 1 from 2 to 4 +move 2 from 4 to 5 +move 1 from 3 to 6 +move 5 from 8 to 3 +move 12 from 8 to 4 +move 2 from 2 to 5 +move 12 from 8 to 1 +move 1 from 6 to 9 +move 10 from 5 to 7 +move 3 from 3 to 9 +move 6 from 8 to 9 +move 2 from 3 to 5 +move 8 from 4 to 7 +move 1 from 3 to 2 +move 6 from 8 to 6 +move 8 from 9 to 3 +move 2 from 5 to 4 +move 1 from 2 to 3 +move 2 from 9 to 2 +move 1 from 9 to 2 +move 1 from 2 to 1 +move 2 from 2 to 4 +move 5 from 4 to 2 +move 3 from 2 to 3 +move 2 from 4 to 2 +move 18 from 7 to 3 +move 3 from 6 to 9 +move 1 from 6 to 3 +move 1 from 4 to 1 +move 1 from 6 to 3 +move 6 from 3 to 9 +move 2 from 2 to 6 +move 26 from 3 to 7 +move 2 from 2 to 3 +move 2 from 6 to 8 +move 3 from 1 to 5 +move 8 from 9 to 1 +move 1 from 8 to 5 +move 1 from 3 to 1 +move 2 from 9 to 3 +move 1 from 1 to 2 +move 12 from 1 to 7 +move 1 from 8 to 5 +move 2 from 3 to 5 +move 1 from 3 to 6 +move 2 from 6 to 2 +move 7 from 5 to 7 +move 1 from 4 to 2 +move 15 from 7 to 4 +move 1 from 4 to 9 +move 1 from 7 to 6 +move 14 from 4 to 2 +move 1 from 1 to 2 +move 5 from 1 to 5 +move 4 from 5 to 4 +move 1 from 6 to 3 +move 4 from 4 to 7 +move 1 from 9 to 2 +move 1 from 3 to 5 +move 2 from 5 to 1 +move 1 from 1 to 6 +move 2 from 1 to 5 +move 9 from 2 to 9 +move 1 from 6 to 1 +move 1 from 1 to 9 +move 1 from 5 to 4 +move 1 from 5 to 6 +move 4 from 7 to 2 +move 1 from 4 to 1 +move 18 from 7 to 1 +move 17 from 1 to 7 +move 4 from 9 to 5 +move 1 from 5 to 8 +move 1 from 1 to 4 +move 2 from 9 to 6 +move 3 from 9 to 7 +move 1 from 1 to 5 +move 1 from 7 to 5 +move 16 from 7 to 2 +move 1 from 4 to 2 +move 1 from 8 to 7 +move 1 from 9 to 8 +move 1 from 8 to 4 +move 3 from 5 to 3 +move 15 from 7 to 6 +move 7 from 6 to 4 +move 9 from 6 to 2 +move 2 from 5 to 7 +move 2 from 6 to 8 +move 4 from 4 to 7 +move 2 from 8 to 1 +move 11 from 2 to 7 +move 1 from 4 to 2 +move 2 from 3 to 6 +move 3 from 4 to 5 +move 12 from 7 to 1 +move 1 from 7 to 3 +move 31 from 2 to 4 +move 3 from 7 to 2 +move 1 from 6 to 3 +move 1 from 5 to 1 +move 1 from 5 to 2 +move 2 from 3 to 4 +move 1 from 6 to 1 +move 1 from 3 to 6 +move 1 from 5 to 6 +move 1 from 2 to 4 +move 11 from 1 to 4 +move 5 from 1 to 5 +move 1 from 7 to 3 +move 3 from 5 to 8 +move 1 from 8 to 7 +move 1 from 5 to 3 +move 2 from 8 to 5 +move 2 from 6 to 2 +move 2 from 5 to 1 +move 1 from 7 to 9 +move 1 from 3 to 9 +move 2 from 9 to 5 +move 1 from 1 to 6 +move 1 from 6 to 5 +move 1 from 3 to 5 +move 13 from 4 to 8 +move 5 from 2 to 3 +move 3 from 3 to 4 +move 1 from 8 to 6 +move 4 from 5 to 2 +move 1 from 1 to 5 +move 1 from 3 to 7 +move 2 from 5 to 4 +move 11 from 4 to 5 +move 1 from 3 to 7 +move 15 from 4 to 2 +move 1 from 6 to 4 +move 19 from 2 to 8 +move 8 from 8 to 3 +move 2 from 3 to 8 +move 7 from 5 to 4 +move 6 from 3 to 4 +move 8 from 4 to 5 +move 7 from 4 to 6 +move 2 from 7 to 5 +move 9 from 5 to 6 +move 13 from 8 to 3 +move 3 from 4 to 3 +move 6 from 3 to 4 +move 6 from 8 to 2 +move 4 from 5 to 9 +move 5 from 8 to 7 +move 4 from 6 to 2 +move 5 from 3 to 5 +move 1 from 6 to 9 +move 8 from 2 to 6 +move 1 from 8 to 7 +move 1 from 2 to 5 +move 1 from 4 to 1 +move 3 from 3 to 1 +move 1 from 7 to 3 +move 4 from 9 to 8 +move 6 from 6 to 2 +move 2 from 8 to 4 +move 1 from 7 to 6 +move 3 from 5 to 1 +move 4 from 5 to 3 +move 6 from 2 to 9 +move 4 from 7 to 4 +move 2 from 8 to 5 +move 2 from 9 to 5 +move 4 from 5 to 6 +move 1 from 2 to 5 +move 8 from 6 to 7 +move 18 from 4 to 2 +move 2 from 3 to 6 +move 6 from 1 to 8 +move 8 from 7 to 9 +move 9 from 6 to 4 +move 1 from 5 to 4 +move 5 from 8 to 4 +move 1 from 4 to 5 +move 1 from 8 to 1 +move 8 from 9 to 8 +move 3 from 3 to 9 +move 5 from 2 to 7 +move 1 from 5 to 2 +move 2 from 4 to 8 +move 11 from 2 to 8 +move 1 from 7 to 2 +move 2 from 6 to 5 +move 1 from 6 to 2 +move 4 from 2 to 3 +move 2 from 1 to 3 +move 5 from 9 to 7 +move 1 from 5 to 8 +move 6 from 7 to 8 +move 7 from 3 to 7 +move 1 from 5 to 9 +move 3 from 9 to 7 +move 1 from 4 to 1 +move 1 from 9 to 8 +move 8 from 7 to 3 +move 1 from 2 to 4 +move 1 from 1 to 7 +move 9 from 3 to 7 +move 7 from 4 to 7 +move 8 from 7 to 3 +move 1 from 7 to 9 +move 13 from 7 to 4 +move 1 from 4 to 6 +move 11 from 8 to 2 +move 5 from 3 to 7 +move 1 from 9 to 6 +move 7 from 2 to 9 +move 2 from 2 to 4 +move 4 from 9 to 2 +move 17 from 8 to 3 +move 3 from 3 to 4 +move 1 from 7 to 6 +move 5 from 2 to 3 +move 8 from 4 to 1 +move 2 from 6 to 4 +move 1 from 2 to 7 +move 1 from 1 to 4 +move 1 from 8 to 2 +move 2 from 7 to 4 +move 7 from 1 to 9 +move 16 from 4 to 2 +move 1 from 6 to 1 +move 2 from 2 to 9 +move 6 from 2 to 7 +move 1 from 1 to 6 +move 3 from 2 to 6 +move 10 from 3 to 6 +move 6 from 9 to 8 +move 3 from 4 to 3 +move 6 from 9 to 2 +move 4 from 3 to 7 +move 10 from 2 to 5 +move 2 from 2 to 6 +move 3 from 6 to 3 +move 1 from 8 to 2 +move 1 from 2 to 6 +move 5 from 6 to 1 +move 3 from 6 to 7 +move 5 from 8 to 4 +move 3 from 7 to 1 +move 2 from 6 to 1 +move 2 from 4 to 1 +move 2 from 5 to 8 +move 1 from 8 to 7 +move 1 from 8 to 9 +move 8 from 3 to 4 +move 11 from 1 to 7 +move 1 from 9 to 8 +move 1 from 8 to 3 +move 3 from 6 to 3 +move 1 from 6 to 8 +move 3 from 5 to 2 +move 1 from 8 to 6 +move 2 from 5 to 8 +move 3 from 5 to 6 +move 3 from 2 to 4 +move 2 from 8 to 4 +move 22 from 7 to 3 +move 12 from 3 to 2 +move 9 from 3 to 9 +move 1 from 1 to 2 +move 2 from 6 to 8 +move 2 from 8 to 4 +move 2 from 6 to 5 +move 11 from 3 to 1 +move 18 from 4 to 3 +move 3 from 7 to 3 +move 1 from 5 to 7 +move 3 from 2 to 4 +move 2 from 4 to 9 +move 6 from 1 to 4 +move 1 from 5 to 1 +move 10 from 9 to 3 +move 27 from 3 to 9 +move 6 from 2 to 8 +move 5 from 4 to 2 +move 3 from 3 to 8 +move 1 from 7 to 8 +move 10 from 8 to 2 +move 5 from 1 to 5 +move 1 from 3 to 5 +move 1 from 1 to 8 +move 14 from 9 to 4 +move 6 from 5 to 6 +move 11 from 9 to 4 +move 6 from 6 to 3 +move 1 from 8 to 6 +move 2 from 9 to 5 +move 1 from 2 to 5 +move 8 from 2 to 1 +move 12 from 4 to 7 +move 1 from 6 to 8 +move 14 from 4 to 1 +move 1 from 9 to 8 +move 1 from 5 to 1 +move 2 from 5 to 2 +move 11 from 1 to 6 +move 11 from 6 to 1 +move 1 from 8 to 7 +move 1 from 8 to 2 +move 12 from 1 to 7 +move 1 from 4 to 7 +move 5 from 1 to 5 +move 5 from 2 to 6 +move 1 from 5 to 6 +move 1 from 2 to 9 +move 6 from 1 to 3 +move 19 from 7 to 2 +move 1 from 9 to 6 +move 9 from 3 to 2 +move 9 from 2 to 7 +move 3 from 5 to 8 +move 1 from 5 to 1 +move 3 from 3 to 9 +move 7 from 2 to 9 +move 15 from 7 to 2 +move 10 from 9 to 4 +move 4 from 4 to 9 +move 1 from 6 to 4 +move 1 from 1 to 6 +move 26 from 2 to 5 +move 1 from 7 to 3 +move 6 from 4 to 8 +move 3 from 2 to 9 +move 6 from 8 to 3 +move 4 from 5 to 7 +move 1 from 4 to 5 +move 2 from 2 to 1 +move 6 from 9 to 1 +move 3 from 3 to 8 +move 3 from 2 to 8 +move 3 from 7 to 9 +move 6 from 1 to 7 +move 2 from 3 to 2 +move 2 from 2 to 5 +move 1 from 8 to 6 +move 4 from 7 to 3 +move 10 from 5 to 3 +move 4 from 9 to 1 +move 6 from 3 to 1 +move 1 from 7 to 4 +move 4 from 3 to 2 +move 1 from 3 to 1 +move 13 from 1 to 5 +move 1 from 3 to 7 +move 1 from 3 to 8 +move 4 from 6 to 3 +move 1 from 6 to 3 +move 7 from 8 to 2 +move 1 from 6 to 9 +move 2 from 7 to 2 +move 1 from 9 to 5 +move 2 from 8 to 6 +move 1 from 7 to 5 +move 1 from 3 to 1 +move 30 from 5 to 2 +move 1 from 3 to 4 +move 2 from 6 to 1 +move 5 from 3 to 4 +move 2 from 6 to 5 +move 5 from 4 to 3 +move 1 from 3 to 1 +move 4 from 1 to 6 +move 1 from 2 to 5 +move 2 from 4 to 9 +move 4 from 3 to 5 +move 1 from 3 to 5 +move 1 from 5 to 3 +move 6 from 5 to 1 +move 2 from 1 to 9 +move 4 from 6 to 2 +move 1 from 3 to 5 +move 1 from 5 to 2 +move 1 from 5 to 2 +move 8 from 2 to 5 +move 4 from 9 to 6 +move 3 from 1 to 4 +move 3 from 6 to 2 +move 2 from 4 to 2 +move 1 from 6 to 1 +move 1 from 4 to 6 +move 2 from 5 to 1 +move 1 from 6 to 8 +move 3 from 5 to 2 +move 2 from 5 to 6 +move 1 from 6 to 7 +move 1 from 5 to 9 +move 1 from 7 to 5 +move 3 from 1 to 9 +move 3 from 9 to 5 +move 31 from 2 to 6 +move 1 from 1 to 3 +move 1 from 8 to 9 +move 30 from 6 to 9 +move 2 from 9 to 8 +move 13 from 2 to 3 +move 4 from 5 to 2 +move 1 from 8 to 4 +move 1 from 4 to 1 +move 1 from 1 to 6 +move 5 from 2 to 8 +move 1 from 2 to 8 +move 26 from 9 to 3 +move 18 from 3 to 8 +move 1 from 2 to 1 +move 12 from 3 to 8 +move 1 from 2 to 3 +move 3 from 6 to 4 +move 1 from 1 to 9 +move 11 from 8 to 5 +move 1 from 4 to 7 +move 9 from 3 to 9 +move 1 from 7 to 8 +move 11 from 8 to 3 +move 11 from 3 to 2 +move 11 from 2 to 9 +move 19 from 9 to 8 +move 3 from 5 to 7 +move 2 from 4 to 2 +move 2 from 2 to 8 +move 29 from 8 to 2 +move 5 from 5 to 4 +move 1 from 9 to 6 +move 2 from 5 to 9 +move 1 from 6 to 9 +move 7 from 8 to 7 +move 1 from 9 to 7 +move 6 from 9 to 1 +move 1 from 9 to 4 +move 1 from 5 to 4 +move 15 from 2 to 5 +move 3 from 1 to 7 +move 5 from 5 to 2 +move 1 from 8 to 3 +move 1 from 5 to 8 +move 2 from 3 to 6 +move 1 from 3 to 8 +move 9 from 2 to 1 +move 1 from 8 to 7 +move 1 from 8 to 3 +move 10 from 7 to 8 +move 4 from 7 to 3 +move 1 from 7 to 2 +move 1 from 8 to 6 +move 3 from 6 to 5 +move 6 from 5 to 8 +move 3 from 1 to 3 +move 8 from 3 to 7 +move 3 from 1 to 3 +move 4 from 8 to 3 +move 1 from 4 to 5 +move 4 from 1 to 4 +move 1 from 4 to 5 +move 1 from 7 to 4 +move 4 from 4 to 1 +move 2 from 8 to 7 +move 6 from 5 to 2 +move 2 from 8 to 1 +move 6 from 4 to 7 +move 1 from 5 to 4 +move 5 from 8 to 6 +move 1 from 6 to 9