From c15d9ad7a99355b463f0241ceabac70778200b82 Mon Sep 17 00:00:00 2001 From: Peter Hudec Date: Mon, 5 Dec 2022 22:54:26 +0100 Subject: [PATCH] day05 --- 05/input.txt | 511 ++++++++++++++++++++++++++++++++++++++++++++ 05/input_sample.txt | 9 + 05/solve01.py | 43 ++++ 05/solve02.py | 42 ++++ 4 files changed, 605 insertions(+) create mode 100644 05/input.txt create mode 100644 05/input_sample.txt create mode 100644 05/solve01.py create mode 100644 05/solve02.py diff --git a/05/input.txt b/05/input.txt new file mode 100644 index 0000000..77689d0 --- /dev/null +++ b/05/input.txt @@ -0,0 +1,511 @@ + [P] [Q] [T] +[F] [N] [P] [L] [M] +[H] [T] [H] [M] [H] [Z] +[M] [C] [P] [Q] [R] [C] [J] +[T] [J] [M] [F] [L] [G] [R] [Q] +[V] [G] [D] [V] [G] [D] [N] [W] [L] +[L] [Q] [S] [B] [H] [B] [M] [L] [D] +[D] [H] [R] [L] [N] [W] [G] [C] [R] + 1 2 3 4 5 6 7 8 9 + +move 1 from 7 to 6 +move 1 from 8 to 5 +move 3 from 7 to 4 +move 5 from 9 to 6 +move 3 from 7 to 9 +move 2 from 5 to 7 +move 10 from 6 to 8 +move 2 from 2 to 3 +move 2 from 9 to 1 +move 6 from 8 to 2 +move 5 from 3 to 8 +move 4 from 5 to 9 +move 3 from 4 to 5 +move 2 from 1 to 8 +move 3 from 1 to 7 +move 1 from 7 to 1 +move 4 from 7 to 8 +move 1 from 5 to 6 +move 1 from 9 to 3 +move 8 from 2 to 4 +move 1 from 5 to 8 +move 1 from 5 to 3 +move 2 from 1 to 8 +move 4 from 3 to 4 +move 1 from 3 to 4 +move 1 from 1 to 7 +move 1 from 7 to 8 +move 1 from 7 to 4 +move 5 from 9 to 1 +move 2 from 6 to 7 +move 3 from 2 to 1 +move 12 from 8 to 7 +move 8 from 7 to 3 +move 1 from 2 to 8 +move 6 from 7 to 1 +move 1 from 6 to 3 +move 8 from 4 to 3 +move 5 from 3 to 6 +move 6 from 1 to 8 +move 2 from 1 to 2 +move 2 from 3 to 1 +move 4 from 4 to 5 +move 1 from 5 to 7 +move 1 from 6 to 9 +move 1 from 4 to 9 +move 8 from 1 to 4 +move 10 from 3 to 5 +move 2 from 4 to 5 +move 2 from 2 to 6 +move 2 from 1 to 6 +move 11 from 4 to 7 +move 9 from 6 to 5 +move 16 from 8 to 3 +move 15 from 5 to 6 +move 10 from 3 to 6 +move 24 from 6 to 5 +move 5 from 7 to 5 +move 1 from 6 to 3 +move 1 from 7 to 2 +move 2 from 7 to 6 +move 3 from 3 to 6 +move 8 from 5 to 1 +move 3 from 9 to 8 +move 3 from 8 to 4 +move 1 from 7 to 1 +move 1 from 2 to 9 +move 1 from 9 to 2 +move 2 from 3 to 1 +move 2 from 4 to 2 +move 5 from 6 to 8 +move 3 from 7 to 1 +move 1 from 4 to 2 +move 26 from 5 to 9 +move 1 from 3 to 6 +move 7 from 1 to 9 +move 1 from 3 to 5 +move 1 from 6 to 5 +move 1 from 5 to 4 +move 5 from 5 to 6 +move 1 from 4 to 9 +move 3 from 9 to 3 +move 4 from 8 to 5 +move 2 from 5 to 2 +move 1 from 1 to 6 +move 1 from 8 to 9 +move 2 from 2 to 4 +move 2 from 3 to 7 +move 1 from 7 to 6 +move 7 from 6 to 7 +move 1 from 4 to 3 +move 2 from 2 to 4 +move 28 from 9 to 3 +move 26 from 3 to 7 +move 2 from 4 to 3 +move 2 from 9 to 1 +move 4 from 3 to 6 +move 1 from 4 to 5 +move 1 from 3 to 4 +move 3 from 1 to 9 +move 1 from 4 to 7 +move 1 from 5 to 7 +move 1 from 6 to 9 +move 23 from 7 to 1 +move 4 from 9 to 5 +move 3 from 9 to 4 +move 2 from 6 to 3 +move 1 from 6 to 7 +move 3 from 3 to 9 +move 11 from 7 to 2 +move 4 from 2 to 3 +move 23 from 1 to 2 +move 15 from 2 to 4 +move 2 from 7 to 9 +move 13 from 2 to 8 +move 1 from 7 to 5 +move 1 from 2 to 8 +move 7 from 4 to 8 +move 6 from 4 to 3 +move 1 from 2 to 4 +move 1 from 2 to 9 +move 20 from 8 to 5 +move 1 from 8 to 4 +move 3 from 4 to 7 +move 3 from 3 to 9 +move 1 from 2 to 8 +move 20 from 5 to 3 +move 6 from 5 to 3 +move 26 from 3 to 9 +move 2 from 7 to 5 +move 1 from 5 to 4 +move 1 from 7 to 8 +move 2 from 8 to 5 +move 12 from 9 to 4 +move 2 from 3 to 2 +move 4 from 1 to 9 +move 2 from 3 to 1 +move 4 from 5 to 6 +move 5 from 9 to 4 +move 2 from 6 to 3 +move 2 from 6 to 8 +move 2 from 8 to 3 +move 1 from 2 to 7 +move 21 from 4 to 2 +move 1 from 4 to 5 +move 13 from 2 to 4 +move 4 from 3 to 9 +move 25 from 9 to 7 +move 7 from 2 to 4 +move 18 from 7 to 8 +move 2 from 1 to 5 +move 1 from 3 to 9 +move 2 from 9 to 3 +move 1 from 1 to 6 +move 8 from 7 to 6 +move 4 from 3 to 2 +move 1 from 4 to 7 +move 6 from 2 to 5 +move 1 from 7 to 3 +move 5 from 6 to 8 +move 4 from 4 to 1 +move 9 from 5 to 1 +move 12 from 4 to 3 +move 1 from 6 to 5 +move 1 from 5 to 2 +move 13 from 3 to 8 +move 14 from 8 to 6 +move 2 from 1 to 6 +move 1 from 2 to 5 +move 11 from 1 to 3 +move 1 from 5 to 3 +move 6 from 6 to 8 +move 23 from 8 to 5 +move 1 from 8 to 1 +move 18 from 5 to 8 +move 5 from 6 to 8 +move 10 from 3 to 8 +move 1 from 1 to 5 +move 2 from 4 to 8 +move 1 from 4 to 7 +move 5 from 5 to 3 +move 1 from 6 to 1 +move 6 from 3 to 9 +move 35 from 8 to 4 +move 1 from 7 to 6 +move 2 from 9 to 8 +move 1 from 1 to 6 +move 17 from 4 to 7 +move 1 from 5 to 1 +move 4 from 9 to 6 +move 12 from 6 to 4 +move 29 from 4 to 2 +move 17 from 7 to 8 +move 27 from 2 to 7 +move 2 from 2 to 1 +move 1 from 3 to 1 +move 25 from 7 to 4 +move 25 from 4 to 6 +move 1 from 4 to 2 +move 4 from 1 to 6 +move 1 from 2 to 6 +move 25 from 6 to 1 +move 5 from 6 to 8 +move 15 from 1 to 6 +move 2 from 7 to 8 +move 15 from 6 to 2 +move 14 from 2 to 8 +move 1 from 2 to 3 +move 4 from 1 to 4 +move 4 from 4 to 2 +move 6 from 1 to 8 +move 3 from 2 to 5 +move 3 from 5 to 7 +move 1 from 2 to 3 +move 1 from 6 to 8 +move 8 from 8 to 5 +move 2 from 7 to 4 +move 1 from 7 to 9 +move 3 from 5 to 8 +move 2 from 4 to 6 +move 3 from 5 to 8 +move 2 from 3 to 4 +move 2 from 6 to 5 +move 1 from 9 to 8 +move 48 from 8 to 5 +move 1 from 8 to 9 +move 41 from 5 to 4 +move 4 from 5 to 2 +move 3 from 2 to 7 +move 1 from 2 to 7 +move 1 from 8 to 1 +move 1 from 9 to 4 +move 1 from 1 to 3 +move 7 from 4 to 7 +move 11 from 7 to 4 +move 4 from 4 to 1 +move 37 from 4 to 9 +move 4 from 4 to 3 +move 32 from 9 to 3 +move 5 from 9 to 1 +move 12 from 3 to 2 +move 3 from 4 to 1 +move 3 from 1 to 6 +move 3 from 1 to 6 +move 2 from 1 to 5 +move 9 from 2 to 7 +move 3 from 7 to 3 +move 6 from 6 to 5 +move 4 from 3 to 6 +move 3 from 6 to 9 +move 13 from 3 to 8 +move 3 from 1 to 9 +move 2 from 3 to 2 +move 2 from 7 to 8 +move 1 from 6 to 8 +move 4 from 2 to 8 +move 2 from 8 to 3 +move 1 from 2 to 1 +move 4 from 7 to 3 +move 6 from 3 to 5 +move 3 from 9 to 8 +move 13 from 8 to 6 +move 1 from 9 to 2 +move 2 from 3 to 8 +move 1 from 1 to 9 +move 1 from 1 to 3 +move 10 from 6 to 3 +move 1 from 2 to 5 +move 22 from 5 to 7 +move 1 from 9 to 3 +move 1 from 8 to 7 +move 2 from 7 to 8 +move 6 from 8 to 4 +move 2 from 9 to 2 +move 21 from 7 to 6 +move 4 from 8 to 5 +move 1 from 8 to 4 +move 1 from 5 to 7 +move 12 from 3 to 6 +move 1 from 2 to 6 +move 1 from 7 to 9 +move 1 from 2 to 6 +move 6 from 3 to 5 +move 6 from 4 to 2 +move 1 from 3 to 6 +move 1 from 9 to 7 +move 6 from 2 to 7 +move 22 from 6 to 4 +move 3 from 6 to 5 +move 7 from 5 to 7 +move 3 from 7 to 8 +move 2 from 5 to 3 +move 2 from 3 to 7 +move 13 from 6 to 8 +move 3 from 7 to 1 +move 3 from 5 to 9 +move 16 from 4 to 5 +move 1 from 5 to 8 +move 2 from 1 to 6 +move 1 from 1 to 7 +move 6 from 4 to 2 +move 4 from 8 to 7 +move 13 from 5 to 7 +move 1 from 6 to 3 +move 2 from 5 to 6 +move 10 from 7 to 6 +move 1 from 3 to 9 +move 1 from 4 to 3 +move 1 from 3 to 5 +move 12 from 7 to 3 +move 2 from 2 to 1 +move 1 from 5 to 9 +move 2 from 9 to 6 +move 4 from 2 to 7 +move 7 from 7 to 9 +move 1 from 7 to 8 +move 1 from 1 to 9 +move 11 from 9 to 7 +move 4 from 8 to 3 +move 5 from 3 to 5 +move 2 from 8 to 4 +move 3 from 5 to 2 +move 2 from 2 to 8 +move 1 from 5 to 2 +move 5 from 8 to 2 +move 7 from 7 to 2 +move 4 from 8 to 9 +move 2 from 7 to 6 +move 4 from 9 to 7 +move 6 from 2 to 4 +move 1 from 5 to 6 +move 5 from 3 to 5 +move 1 from 8 to 1 +move 10 from 6 to 3 +move 8 from 2 to 8 +move 1 from 8 to 1 +move 5 from 3 to 2 +move 2 from 8 to 7 +move 6 from 7 to 4 +move 12 from 4 to 1 +move 4 from 1 to 2 +move 1 from 2 to 1 +move 8 from 2 to 9 +move 2 from 4 to 8 +move 5 from 9 to 7 +move 8 from 3 to 8 +move 2 from 3 to 1 +move 6 from 8 to 2 +move 7 from 7 to 2 +move 1 from 3 to 5 +move 2 from 7 to 2 +move 1 from 9 to 1 +move 1 from 9 to 7 +move 1 from 9 to 4 +move 1 from 6 to 7 +move 1 from 2 to 3 +move 1 from 3 to 8 +move 1 from 4 to 9 +move 5 from 6 to 1 +move 7 from 8 to 2 +move 1 from 7 to 4 +move 9 from 2 to 8 +move 7 from 2 to 7 +move 1 from 4 to 2 +move 8 from 7 to 5 +move 4 from 8 to 7 +move 8 from 8 to 6 +move 9 from 1 to 4 +move 1 from 9 to 1 +move 4 from 7 to 6 +move 7 from 1 to 7 +move 6 from 7 to 3 +move 4 from 1 to 8 +move 13 from 6 to 3 +move 6 from 2 to 3 +move 1 from 3 to 4 +move 2 from 3 to 7 +move 1 from 6 to 9 +move 11 from 5 to 1 +move 1 from 6 to 3 +move 8 from 4 to 1 +move 2 from 5 to 2 +move 1 from 9 to 5 +move 2 from 8 to 7 +move 7 from 1 to 5 +move 2 from 7 to 3 +move 8 from 5 to 4 +move 1 from 8 to 2 +move 1 from 5 to 7 +move 3 from 7 to 2 +move 4 from 4 to 7 +move 4 from 3 to 4 +move 20 from 3 to 2 +move 1 from 8 to 3 +move 1 from 3 to 8 +move 4 from 7 to 2 +move 1 from 8 to 6 +move 1 from 7 to 5 +move 1 from 3 to 1 +move 1 from 4 to 2 +move 5 from 1 to 4 +move 14 from 4 to 1 +move 1 from 6 to 5 +move 1 from 2 to 3 +move 1 from 5 to 1 +move 11 from 2 to 9 +move 18 from 1 to 2 +move 4 from 1 to 3 +move 12 from 2 to 5 +move 5 from 2 to 4 +move 7 from 5 to 1 +move 1 from 2 to 9 +move 9 from 1 to 9 +move 1 from 3 to 6 +move 2 from 3 to 9 +move 1 from 6 to 1 +move 1 from 4 to 8 +move 1 from 3 to 4 +move 1 from 3 to 8 +move 16 from 9 to 5 +move 2 from 2 to 7 +move 14 from 5 to 8 +move 16 from 8 to 5 +move 1 from 7 to 9 +move 1 from 7 to 6 +move 4 from 9 to 5 +move 11 from 5 to 6 +move 12 from 2 to 4 +move 16 from 5 to 7 +move 4 from 7 to 2 +move 1 from 5 to 6 +move 3 from 9 to 1 +move 4 from 7 to 9 +move 3 from 6 to 4 +move 9 from 2 to 9 +move 3 from 1 to 8 +move 2 from 8 to 1 +move 1 from 8 to 2 +move 5 from 6 to 1 +move 7 from 7 to 1 +move 1 from 7 to 6 +move 8 from 4 to 5 +move 1 from 2 to 6 +move 12 from 9 to 2 +move 3 from 2 to 9 +move 8 from 5 to 8 +move 12 from 4 to 5 +move 1 from 2 to 9 +move 1 from 5 to 6 +move 2 from 1 to 7 +move 4 from 5 to 2 +move 6 from 5 to 1 +move 2 from 7 to 6 +move 1 from 5 to 1 +move 1 from 8 to 5 +move 7 from 6 to 9 +move 2 from 9 to 4 +move 16 from 1 to 8 +move 1 from 5 to 8 +move 7 from 2 to 8 +move 3 from 6 to 2 +move 1 from 4 to 8 +move 28 from 8 to 3 +move 1 from 4 to 2 +move 4 from 1 to 2 +move 11 from 2 to 7 +move 9 from 7 to 8 +move 7 from 9 to 5 +move 4 from 8 to 1 +move 2 from 9 to 1 +move 2 from 1 to 5 +move 1 from 7 to 9 +move 1 from 1 to 9 +move 6 from 5 to 3 +move 3 from 5 to 1 +move 2 from 2 to 8 +move 7 from 8 to 3 +move 7 from 3 to 7 +move 4 from 1 to 9 +move 1 from 8 to 9 +move 2 from 8 to 1 +move 1 from 8 to 1 +move 6 from 7 to 6 +move 6 from 6 to 5 +move 17 from 3 to 6 +move 2 from 9 to 2 +move 2 from 1 to 4 +move 12 from 3 to 8 +move 6 from 6 to 5 +move 2 from 2 to 1 +move 4 from 9 to 7 +move 2 from 7 to 3 +move 1 from 1 to 5 +move 10 from 8 to 6 +move 2 from 3 to 9 +move 9 from 5 to 2 +move 7 from 2 to 8 +move 1 from 4 to 8 +move 1 from 4 to 6 +move 7 from 8 to 7 +move 3 from 9 to 7 +move 4 from 3 to 4 \ No newline at end of file diff --git a/05/input_sample.txt b/05/input_sample.txt new file mode 100644 index 0000000..e98aba4 --- /dev/null +++ b/05/input_sample.txt @@ -0,0 +1,9 @@ + [D] +[N] [C] +[Z] [M] [P] + 1 2 3 + +move 1 from 2 to 1 +move 3 from 1 to 3 +move 2 from 2 to 1 +move 1 from 1 to 2 \ No newline at end of file diff --git a/05/solve01.py b/05/solve01.py new file mode 100644 index 0000000..29c567c --- /dev/null +++ b/05/solve01.py @@ -0,0 +1,43 @@ +#/usr/bin/env python + +from collections import defaultdict + +import re +RE_MOVE = re.compile(r"^move (\d+) from (\d+) to (\d+)$") + +def read_cargo(f): + cargo = defaultdict(list) + for line in f: + line = line.rstrip() + if len(line) == 0: + break + pos = 1 + while (pos-1)*4+1 < len(line): + c = line[(pos-1)*4+1] + if c == ' ': + pos += 1 + continue + cargo[pos].append(c) + pos += 1 + return cargo + +def read_moves(f): + for line in f: + line = line.strip() + m = RE_MOVE.match(line) + if not m: + continue + yield (int(m.group(1)), int(m.group(2)), int(m.group(3))) + + +with open("input.txt", "r") as f: + cargo = read_cargo(f) + for move in read_moves(f): + slice = cargo[move[1]][:move[0]] + slice.reverse() + cargo[move[1]] = cargo[move[1]][move[0]:] + cargo[move[2]] = slice + cargo[move[2]] + +for k in sorted(cargo.keys()): + print(cargo[k][0], end ="") +print() \ No newline at end of file diff --git a/05/solve02.py b/05/solve02.py new file mode 100644 index 0000000..69c770e --- /dev/null +++ b/05/solve02.py @@ -0,0 +1,42 @@ +#/usr/bin/env python + +from collections import defaultdict + +import re +RE_MOVE = re.compile(r"^move (\d+) from (\d+) to (\d+)$") + +def read_cargo(f): + cargo = defaultdict(list) + for line in f: + line = line.rstrip() + if len(line) == 0: + break + pos = 1 + while (pos-1)*4+1 < len(line): + c = line[(pos-1)*4+1] + if c == ' ': + pos += 1 + continue + cargo[pos].append(c) + pos += 1 + return cargo + +def read_moves(f): + for line in f: + line = line.strip() + m = RE_MOVE.match(line) + if not m: + continue + yield (int(m.group(1)), int(m.group(2)), int(m.group(3))) + + +with open("input.txt", "r") as f: + cargo = read_cargo(f) + for move in read_moves(f): + slice = cargo[move[1]][:move[0]] + cargo[move[1]] = cargo[move[1]][move[0]:] + cargo[move[2]] = slice + cargo[move[2]] + +for k in sorted(cargo.keys()): + print(cargo[k][0], end ="") +print() \ No newline at end of file