day05 finished
This commit is contained in:
parent
543d0823c3
commit
380b825929
6 changed files with 706 additions and 0 deletions
|
|
@ -8,6 +8,7 @@ I use python 3.11 without any libraries beyond the standard.
|
||||||
|
|
||||||
| Day | Time | Rank | Score | Time | Rank | Score |
|
| Day | Time | Rank | Score | Time | Rank | Score |
|
||||||
| --- | --------- | ----- | ----- | -------- | ----- | ----- |
|
| --- | --------- | ----- | ----- | -------- | ----- | ----- |
|
||||||
|
| 5 | 01:01:27 | 11570 | 0 | 01:05:20 | 10701 | 0 |
|
||||||
| 4 | 00:12:09 | 5789 | 0 | 00:16:03 | 5187 | 0 |
|
| 4 | 00:12:09 | 5789 | 0 | 00:16:03 | 5187 | 0 |
|
||||||
| 3 | 00:47:15 | 13278 | 0 | 01:07:44 | 12947 | 0 |
|
| 3 | 00:47:15 | 13278 | 0 | 01:07:44 | 12947 | 0 |
|
||||||
| 2 | 00:21:47 | 8874 | 0 | 00:36:49 | 9949 | 0 |
|
| 2 | 00:21:47 | 8874 | 0 | 00:36:49 | 9949 | 0 |
|
||||||
|
|
|
||||||
0
advent/days/day05/__init__.py
Normal file
0
advent/days/day05/__init__.py
Normal file
515
advent/days/day05/data/input.txt
Normal file
515
advent/days/day05/data/input.txt
Normal file
|
|
@ -0,0 +1,515 @@
|
||||||
|
[G] [W] [Q]
|
||||||
|
[Z] [Q] [M] [J] [F]
|
||||||
|
[V] [V] [S] [F] [N] [R]
|
||||||
|
[T] [F] [C] [H] [F] [W] [P]
|
||||||
|
[B] [L] [L] [J] [C] [V] [D] [V]
|
||||||
|
[J] [V] [F] [N] [T] [T] [C] [Z] [W]
|
||||||
|
[G] [R] [Q] [H] [Q] [W] [Z] [G] [B]
|
||||||
|
[R] [J] [S] [Z] [R] [S] [D] [L] [J]
|
||||||
|
1 2 3 4 5 6 7 8 9
|
||||||
|
|
||||||
|
move 6 from 5 to 7
|
||||||
|
move 2 from 9 to 1
|
||||||
|
move 4 from 8 to 6
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 2 from 9 to 1
|
||||||
|
move 1 from 6 to 1
|
||||||
|
move 13 from 7 to 8
|
||||||
|
move 1 from 2 to 8
|
||||||
|
move 9 from 1 to 5
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 3 from 6 to 7
|
||||||
|
move 4 from 4 to 1
|
||||||
|
move 11 from 5 to 6
|
||||||
|
move 6 from 6 to 9
|
||||||
|
move 3 from 4 to 2
|
||||||
|
move 7 from 8 to 6
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 1 from 4 to 3
|
||||||
|
move 7 from 1 to 5
|
||||||
|
move 2 from 2 to 7
|
||||||
|
move 4 from 9 to 6
|
||||||
|
move 1 from 3 to 6
|
||||||
|
move 1 from 1 to 9
|
||||||
|
move 1 from 3 to 6
|
||||||
|
move 1 from 5 to 8
|
||||||
|
move 4 from 6 to 7
|
||||||
|
move 3 from 8 to 7
|
||||||
|
move 7 from 5 to 7
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 1 from 2 to 6
|
||||||
|
move 14 from 6 to 5
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 3 from 9 to 2
|
||||||
|
move 6 from 2 to 9
|
||||||
|
move 7 from 8 to 6
|
||||||
|
move 7 from 7 to 3
|
||||||
|
move 2 from 8 to 7
|
||||||
|
move 6 from 3 to 7
|
||||||
|
move 17 from 7 to 1
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 4 from 5 to 6
|
||||||
|
move 17 from 6 to 9
|
||||||
|
move 7 from 9 to 4
|
||||||
|
move 1 from 2 to 7
|
||||||
|
move 2 from 5 to 4
|
||||||
|
move 3 from 7 to 8
|
||||||
|
move 7 from 5 to 2
|
||||||
|
move 6 from 2 to 8
|
||||||
|
move 8 from 9 to 6
|
||||||
|
move 1 from 2 to 3
|
||||||
|
move 8 from 4 to 9
|
||||||
|
move 7 from 6 to 9
|
||||||
|
move 18 from 1 to 7
|
||||||
|
move 1 from 1 to 8
|
||||||
|
move 2 from 6 to 9
|
||||||
|
move 1 from 3 to 9
|
||||||
|
move 1 from 4 to 6
|
||||||
|
move 1 from 8 to 3
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 10 from 7 to 2
|
||||||
|
move 9 from 8 to 4
|
||||||
|
move 1 from 6 to 4
|
||||||
|
move 2 from 7 to 8
|
||||||
|
move 5 from 4 to 9
|
||||||
|
move 17 from 9 to 5
|
||||||
|
move 2 from 7 to 6
|
||||||
|
move 5 from 9 to 7
|
||||||
|
move 5 from 4 to 2
|
||||||
|
move 8 from 2 to 4
|
||||||
|
move 8 from 4 to 3
|
||||||
|
move 2 from 6 to 5
|
||||||
|
move 2 from 8 to 5
|
||||||
|
move 3 from 9 to 3
|
||||||
|
move 4 from 7 to 3
|
||||||
|
move 6 from 9 to 6
|
||||||
|
move 4 from 6 to 9
|
||||||
|
move 5 from 9 to 3
|
||||||
|
move 8 from 5 to 2
|
||||||
|
move 1 from 1 to 9
|
||||||
|
move 1 from 6 to 3
|
||||||
|
move 1 from 9 to 4
|
||||||
|
move 5 from 7 to 4
|
||||||
|
move 19 from 3 to 1
|
||||||
|
move 4 from 2 to 8
|
||||||
|
move 13 from 5 to 1
|
||||||
|
move 1 from 6 to 3
|
||||||
|
move 3 from 3 to 6
|
||||||
|
move 2 from 8 to 9
|
||||||
|
move 4 from 2 to 9
|
||||||
|
move 2 from 2 to 6
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 5 from 1 to 9
|
||||||
|
move 10 from 9 to 3
|
||||||
|
move 15 from 1 to 6
|
||||||
|
move 21 from 6 to 2
|
||||||
|
move 20 from 2 to 1
|
||||||
|
move 2 from 8 to 9
|
||||||
|
move 28 from 1 to 2
|
||||||
|
move 6 from 4 to 6
|
||||||
|
move 2 from 1 to 5
|
||||||
|
move 3 from 3 to 4
|
||||||
|
move 2 from 5 to 4
|
||||||
|
move 1 from 4 to 3
|
||||||
|
move 3 from 4 to 5
|
||||||
|
move 2 from 5 to 4
|
||||||
|
move 1 from 1 to 8
|
||||||
|
move 25 from 2 to 9
|
||||||
|
move 1 from 4 to 6
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 4 from 3 to 6
|
||||||
|
move 1 from 4 to 9
|
||||||
|
move 2 from 6 to 3
|
||||||
|
move 1 from 5 to 9
|
||||||
|
move 5 from 2 to 8
|
||||||
|
move 7 from 9 to 6
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 3 from 2 to 1
|
||||||
|
move 3 from 3 to 4
|
||||||
|
move 1 from 3 to 5
|
||||||
|
move 16 from 6 to 3
|
||||||
|
move 7 from 8 to 3
|
||||||
|
move 5 from 4 to 3
|
||||||
|
move 1 from 1 to 3
|
||||||
|
move 1 from 2 to 6
|
||||||
|
move 1 from 5 to 6
|
||||||
|
move 21 from 3 to 5
|
||||||
|
move 2 from 1 to 2
|
||||||
|
move 1 from 6 to 7
|
||||||
|
move 10 from 9 to 8
|
||||||
|
move 1 from 6 to 5
|
||||||
|
move 5 from 8 to 7
|
||||||
|
move 12 from 5 to 3
|
||||||
|
move 20 from 3 to 6
|
||||||
|
move 4 from 7 to 9
|
||||||
|
move 1 from 7 to 3
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 2 from 8 to 4
|
||||||
|
move 4 from 8 to 7
|
||||||
|
move 3 from 6 to 1
|
||||||
|
move 1 from 1 to 5
|
||||||
|
move 2 from 9 to 2
|
||||||
|
move 2 from 1 to 5
|
||||||
|
move 2 from 5 to 6
|
||||||
|
move 3 from 7 to 1
|
||||||
|
move 2 from 1 to 4
|
||||||
|
move 4 from 6 to 8
|
||||||
|
move 3 from 4 to 7
|
||||||
|
move 3 from 2 to 5
|
||||||
|
move 2 from 7 to 9
|
||||||
|
move 9 from 9 to 8
|
||||||
|
move 1 from 4 to 1
|
||||||
|
move 7 from 5 to 7
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 4 from 7 to 5
|
||||||
|
move 2 from 1 to 9
|
||||||
|
move 1 from 1 to 2
|
||||||
|
move 5 from 5 to 4
|
||||||
|
move 1 from 2 to 6
|
||||||
|
move 5 from 7 to 9
|
||||||
|
move 5 from 4 to 7
|
||||||
|
move 11 from 9 to 6
|
||||||
|
move 14 from 8 to 9
|
||||||
|
move 23 from 6 to 5
|
||||||
|
move 6 from 9 to 5
|
||||||
|
move 1 from 6 to 2
|
||||||
|
move 10 from 5 to 3
|
||||||
|
move 1 from 4 to 9
|
||||||
|
move 1 from 2 to 1
|
||||||
|
move 2 from 7 to 3
|
||||||
|
move 10 from 5 to 7
|
||||||
|
move 8 from 5 to 2
|
||||||
|
move 5 from 3 to 5
|
||||||
|
move 7 from 5 to 8
|
||||||
|
move 1 from 2 to 7
|
||||||
|
move 9 from 7 to 9
|
||||||
|
move 3 from 2 to 3
|
||||||
|
move 2 from 6 to 2
|
||||||
|
move 2 from 3 to 6
|
||||||
|
move 4 from 7 to 5
|
||||||
|
move 1 from 1 to 5
|
||||||
|
move 4 from 3 to 1
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 1 from 3 to 2
|
||||||
|
move 2 from 6 to 8
|
||||||
|
move 7 from 5 to 3
|
||||||
|
move 9 from 2 to 4
|
||||||
|
move 2 from 1 to 2
|
||||||
|
move 2 from 5 to 3
|
||||||
|
move 1 from 4 to 9
|
||||||
|
move 1 from 6 to 9
|
||||||
|
move 1 from 4 to 2
|
||||||
|
move 2 from 1 to 7
|
||||||
|
move 3 from 2 to 6
|
||||||
|
move 4 from 8 to 7
|
||||||
|
move 2 from 8 to 3
|
||||||
|
move 2 from 3 to 7
|
||||||
|
move 1 from 6 to 5
|
||||||
|
move 2 from 8 to 2
|
||||||
|
move 5 from 4 to 1
|
||||||
|
move 8 from 9 to 8
|
||||||
|
move 1 from 5 to 7
|
||||||
|
move 10 from 9 to 2
|
||||||
|
move 8 from 8 to 2
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 12 from 3 to 9
|
||||||
|
move 7 from 7 to 4
|
||||||
|
move 13 from 2 to 4
|
||||||
|
move 7 from 2 to 7
|
||||||
|
move 1 from 6 to 7
|
||||||
|
move 3 from 9 to 8
|
||||||
|
move 2 from 6 to 3
|
||||||
|
move 1 from 3 to 2
|
||||||
|
move 1 from 3 to 9
|
||||||
|
move 3 from 1 to 5
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 4 from 7 to 6
|
||||||
|
move 5 from 7 to 1
|
||||||
|
move 1 from 2 to 1
|
||||||
|
move 6 from 9 to 4
|
||||||
|
move 5 from 9 to 7
|
||||||
|
move 3 from 8 to 3
|
||||||
|
move 22 from 4 to 9
|
||||||
|
move 24 from 9 to 8
|
||||||
|
move 1 from 9 to 2
|
||||||
|
move 2 from 4 to 3
|
||||||
|
move 10 from 8 to 3
|
||||||
|
move 1 from 2 to 1
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 1 from 6 to 3
|
||||||
|
move 1 from 1 to 4
|
||||||
|
move 4 from 3 to 4
|
||||||
|
move 4 from 6 to 1
|
||||||
|
move 2 from 4 to 5
|
||||||
|
move 4 from 7 to 2
|
||||||
|
move 7 from 4 to 6
|
||||||
|
move 4 from 6 to 1
|
||||||
|
move 2 from 6 to 3
|
||||||
|
move 1 from 6 to 2
|
||||||
|
move 5 from 5 to 2
|
||||||
|
move 12 from 3 to 5
|
||||||
|
move 3 from 7 to 8
|
||||||
|
move 6 from 2 to 3
|
||||||
|
move 11 from 1 to 9
|
||||||
|
move 1 from 1 to 7
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 2 from 3 to 9
|
||||||
|
move 2 from 9 to 7
|
||||||
|
move 4 from 2 to 5
|
||||||
|
move 2 from 7 to 1
|
||||||
|
move 17 from 8 to 1
|
||||||
|
move 1 from 3 to 2
|
||||||
|
move 16 from 1 to 3
|
||||||
|
move 8 from 3 to 4
|
||||||
|
move 2 from 8 to 3
|
||||||
|
move 2 from 1 to 5
|
||||||
|
move 1 from 2 to 6
|
||||||
|
move 12 from 5 to 8
|
||||||
|
move 1 from 6 to 3
|
||||||
|
move 9 from 3 to 9
|
||||||
|
move 8 from 4 to 6
|
||||||
|
move 2 from 1 to 6
|
||||||
|
move 6 from 8 to 4
|
||||||
|
move 3 from 4 to 6
|
||||||
|
move 1 from 1 to 9
|
||||||
|
move 11 from 6 to 8
|
||||||
|
move 3 from 4 to 3
|
||||||
|
move 17 from 9 to 5
|
||||||
|
move 2 from 6 to 7
|
||||||
|
move 1 from 9 to 1
|
||||||
|
move 2 from 8 to 6
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 1 from 8 to 9
|
||||||
|
move 1 from 1 to 7
|
||||||
|
move 3 from 9 to 6
|
||||||
|
move 2 from 7 to 8
|
||||||
|
move 1 from 9 to 6
|
||||||
|
move 15 from 5 to 2
|
||||||
|
move 9 from 3 to 9
|
||||||
|
move 11 from 8 to 3
|
||||||
|
move 6 from 9 to 8
|
||||||
|
move 4 from 6 to 7
|
||||||
|
move 3 from 3 to 7
|
||||||
|
move 5 from 5 to 6
|
||||||
|
move 7 from 7 to 5
|
||||||
|
move 3 from 6 to 1
|
||||||
|
move 2 from 1 to 4
|
||||||
|
move 1 from 9 to 2
|
||||||
|
move 2 from 9 to 3
|
||||||
|
move 2 from 6 to 3
|
||||||
|
move 1 from 1 to 8
|
||||||
|
move 6 from 5 to 9
|
||||||
|
move 8 from 2 to 5
|
||||||
|
move 10 from 8 to 5
|
||||||
|
move 1 from 2 to 9
|
||||||
|
move 21 from 5 to 9
|
||||||
|
move 2 from 8 to 4
|
||||||
|
move 5 from 9 to 1
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 15 from 9 to 2
|
||||||
|
move 1 from 5 to 9
|
||||||
|
move 9 from 9 to 3
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 3 from 4 to 1
|
||||||
|
move 20 from 3 to 5
|
||||||
|
move 20 from 5 to 4
|
||||||
|
move 7 from 4 to 3
|
||||||
|
move 1 from 1 to 7
|
||||||
|
move 11 from 4 to 5
|
||||||
|
move 4 from 3 to 2
|
||||||
|
move 11 from 5 to 4
|
||||||
|
move 2 from 6 to 7
|
||||||
|
move 4 from 3 to 9
|
||||||
|
move 2 from 2 to 8
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 6 from 4 to 6
|
||||||
|
move 2 from 7 to 9
|
||||||
|
move 1 from 7 to 6
|
||||||
|
move 1 from 4 to 9
|
||||||
|
move 4 from 4 to 6
|
||||||
|
move 2 from 8 to 6
|
||||||
|
move 1 from 4 to 3
|
||||||
|
move 1 from 4 to 6
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 3 from 4 to 3
|
||||||
|
move 9 from 2 to 8
|
||||||
|
move 2 from 3 to 7
|
||||||
|
move 5 from 6 to 2
|
||||||
|
move 2 from 7 to 5
|
||||||
|
move 1 from 5 to 2
|
||||||
|
move 1 from 9 to 3
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 13 from 2 to 5
|
||||||
|
move 4 from 9 to 5
|
||||||
|
move 1 from 3 to 4
|
||||||
|
move 9 from 2 to 3
|
||||||
|
move 7 from 3 to 2
|
||||||
|
move 11 from 5 to 6
|
||||||
|
move 5 from 8 to 7
|
||||||
|
move 1 from 3 to 1
|
||||||
|
move 2 from 8 to 5
|
||||||
|
move 2 from 8 to 1
|
||||||
|
move 1 from 4 to 1
|
||||||
|
move 6 from 2 to 7
|
||||||
|
move 3 from 5 to 3
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 7 from 7 to 9
|
||||||
|
move 3 from 3 to 5
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 2 from 3 to 2
|
||||||
|
move 6 from 1 to 7
|
||||||
|
move 10 from 7 to 3
|
||||||
|
move 1 from 2 to 3
|
||||||
|
move 6 from 9 to 8
|
||||||
|
move 1 from 2 to 4
|
||||||
|
move 2 from 6 to 1
|
||||||
|
move 5 from 1 to 9
|
||||||
|
move 8 from 5 to 8
|
||||||
|
move 2 from 1 to 6
|
||||||
|
move 6 from 3 to 4
|
||||||
|
move 1 from 5 to 3
|
||||||
|
move 4 from 9 to 6
|
||||||
|
move 1 from 1 to 4
|
||||||
|
move 2 from 9 to 2
|
||||||
|
move 5 from 6 to 1
|
||||||
|
move 11 from 6 to 7
|
||||||
|
move 1 from 2 to 8
|
||||||
|
move 6 from 7 to 5
|
||||||
|
move 10 from 8 to 4
|
||||||
|
move 2 from 3 to 9
|
||||||
|
move 3 from 3 to 5
|
||||||
|
move 4 from 7 to 9
|
||||||
|
move 2 from 1 to 3
|
||||||
|
move 10 from 5 to 8
|
||||||
|
move 6 from 6 to 1
|
||||||
|
move 2 from 6 to 8
|
||||||
|
move 2 from 9 to 5
|
||||||
|
move 4 from 9 to 6
|
||||||
|
move 7 from 4 to 8
|
||||||
|
move 5 from 6 to 1
|
||||||
|
move 4 from 8 to 2
|
||||||
|
move 2 from 5 to 6
|
||||||
|
move 5 from 4 to 5
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 2 from 3 to 6
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 4 from 6 to 1
|
||||||
|
move 4 from 2 to 3
|
||||||
|
move 5 from 5 to 1
|
||||||
|
move 2 from 3 to 2
|
||||||
|
move 2 from 3 to 2
|
||||||
|
move 20 from 8 to 2
|
||||||
|
move 5 from 4 to 8
|
||||||
|
move 1 from 4 to 3
|
||||||
|
move 8 from 2 to 1
|
||||||
|
move 1 from 5 to 6
|
||||||
|
move 5 from 2 to 3
|
||||||
|
move 1 from 6 to 5
|
||||||
|
move 5 from 3 to 2
|
||||||
|
move 1 from 3 to 7
|
||||||
|
move 6 from 8 to 5
|
||||||
|
move 13 from 2 to 9
|
||||||
|
move 7 from 9 to 8
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 5 from 8 to 3
|
||||||
|
move 2 from 2 to 5
|
||||||
|
move 2 from 8 to 4
|
||||||
|
move 27 from 1 to 5
|
||||||
|
move 1 from 2 to 3
|
||||||
|
move 5 from 3 to 1
|
||||||
|
move 22 from 5 to 7
|
||||||
|
move 1 from 8 to 5
|
||||||
|
move 1 from 3 to 2
|
||||||
|
move 7 from 1 to 3
|
||||||
|
move 2 from 3 to 7
|
||||||
|
move 2 from 2 to 4
|
||||||
|
move 5 from 9 to 1
|
||||||
|
move 5 from 3 to 9
|
||||||
|
move 3 from 1 to 5
|
||||||
|
move 3 from 1 to 6
|
||||||
|
move 3 from 6 to 3
|
||||||
|
move 4 from 4 to 2
|
||||||
|
move 8 from 5 to 3
|
||||||
|
move 8 from 7 to 4
|
||||||
|
move 14 from 7 to 4
|
||||||
|
move 1 from 1 to 7
|
||||||
|
move 6 from 9 to 6
|
||||||
|
move 7 from 5 to 3
|
||||||
|
move 14 from 3 to 6
|
||||||
|
move 2 from 2 to 1
|
||||||
|
move 4 from 3 to 7
|
||||||
|
move 6 from 7 to 6
|
||||||
|
move 1 from 7 to 6
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 2 from 1 to 5
|
||||||
|
move 3 from 5 to 7
|
||||||
|
move 8 from 6 to 5
|
||||||
|
move 5 from 5 to 1
|
||||||
|
move 1 from 7 to 3
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 22 from 4 to 7
|
||||||
|
move 7 from 6 to 3
|
||||||
|
move 4 from 3 to 2
|
||||||
|
move 3 from 1 to 3
|
||||||
|
move 17 from 7 to 6
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 2 from 2 to 4
|
||||||
|
move 3 from 7 to 2
|
||||||
|
move 2 from 2 to 9
|
||||||
|
move 1 from 1 to 8
|
||||||
|
move 2 from 3 to 1
|
||||||
|
move 6 from 6 to 8
|
||||||
|
move 2 from 9 to 2
|
||||||
|
move 4 from 5 to 1
|
||||||
|
move 5 from 8 to 9
|
||||||
|
move 1 from 7 to 3
|
||||||
|
move 4 from 3 to 4
|
||||||
|
move 1 from 7 to 4
|
||||||
|
move 4 from 9 to 7
|
||||||
|
move 5 from 7 to 9
|
||||||
|
move 1 from 7 to 3
|
||||||
|
move 2 from 2 to 8
|
||||||
|
move 5 from 4 to 2
|
||||||
|
move 21 from 6 to 8
|
||||||
|
move 2 from 3 to 8
|
||||||
|
move 23 from 8 to 6
|
||||||
|
move 1 from 2 to 6
|
||||||
|
move 2 from 9 to 8
|
||||||
|
move 22 from 6 to 7
|
||||||
|
move 2 from 9 to 3
|
||||||
|
move 2 from 3 to 7
|
||||||
|
move 2 from 1 to 6
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 3 from 1 to 3
|
||||||
|
move 6 from 7 to 4
|
||||||
|
move 5 from 8 to 5
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 1 from 9 to 3
|
||||||
|
move 6 from 4 to 8
|
||||||
|
move 1 from 5 to 3
|
||||||
|
move 6 from 2 to 8
|
||||||
|
move 15 from 7 to 5
|
||||||
|
move 1 from 7 to 1
|
||||||
|
move 14 from 5 to 8
|
||||||
|
move 1 from 4 to 9
|
||||||
|
move 5 from 1 to 7
|
||||||
|
move 3 from 6 to 2
|
||||||
|
move 4 from 5 to 6
|
||||||
|
move 1 from 4 to 8
|
||||||
|
move 4 from 3 to 1
|
||||||
|
move 2 from 9 to 2
|
||||||
|
move 7 from 7 to 1
|
||||||
|
move 7 from 2 to 7
|
||||||
|
move 9 from 8 to 6
|
||||||
|
move 7 from 7 to 1
|
||||||
|
move 12 from 6 to 8
|
||||||
|
move 25 from 8 to 6
|
||||||
|
move 3 from 8 to 1
|
||||||
|
move 28 from 6 to 2
|
||||||
|
move 15 from 2 to 3
|
||||||
|
move 1 from 5 to 4
|
||||||
|
move 3 from 2 to 7
|
||||||
|
move 6 from 2 to 9
|
||||||
9
advent/days/day05/data/test01.txt
Normal file
9
advent/days/day05/data/test01.txt
Normal file
|
|
@ -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
|
||||||
105
advent/days/day05/solution.py
Normal file
105
advent/days/day05/solution.py
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
from typing import Iterator
|
||||||
|
|
||||||
|
from advent.parser.parser import P
|
||||||
|
|
||||||
|
day_num = 5
|
||||||
|
|
||||||
|
|
||||||
|
def part1(lines: Iterator[str]) -> str:
|
||||||
|
state = State.parse(lines)
|
||||||
|
crates = state.all_moves9000()
|
||||||
|
return State.top(crates)
|
||||||
|
|
||||||
|
|
||||||
|
def part2(lines: Iterator[str]) -> str:
|
||||||
|
state = State.parse(lines)
|
||||||
|
crates = state.all_moves9001()
|
||||||
|
return State.top(crates)
|
||||||
|
|
||||||
|
|
||||||
|
crate_parser: P[str | None] = P.either(P.any_char().in_brackets(), P.string(" ").replace(None))
|
||||||
|
crate_row_parser = crate_parser.sep_by(P.is_char(' '))
|
||||||
|
amount_parser = P.snd(P.string("move "), P.unsigned())
|
||||||
|
from_parser = P.snd(P.string(" from "), P.unsigned())
|
||||||
|
to_parser = P.snd(P.string(" to "), P.unsigned())
|
||||||
|
move_parser = P.seq(amount_parser, from_parser, to_parser)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(slots=True)
|
||||||
|
class State:
|
||||||
|
crates: list[str]
|
||||||
|
moves: list[tuple[int, int, int]]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parse_crate_line(line: str) -> list[None | str] | None:
|
||||||
|
return crate_row_parser.parse(line).get_or(None)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parse_drawing(lines: Iterator[str]) -> list[str]:
|
||||||
|
result: list[str] = []
|
||||||
|
for line in lines:
|
||||||
|
crates = State.parse_crate_line(line)
|
||||||
|
if crates is None:
|
||||||
|
return result
|
||||||
|
|
||||||
|
if len(result) < len(crates):
|
||||||
|
result += [""] * (len(crates) - len(result))
|
||||||
|
for stack, crate in enumerate(crates):
|
||||||
|
if crate is not None:
|
||||||
|
result[stack] = crate + result[stack]
|
||||||
|
|
||||||
|
raise Exception("Can never happen")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parse_move(line: str) -> tuple[int, int, int]:
|
||||||
|
amount, frm, to = move_parser.parse(line).get()
|
||||||
|
return amount, frm - 1, to - 1
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parse(lines: Iterator[str]) -> State:
|
||||||
|
drawing = State.parse_drawing(lines)
|
||||||
|
next(lines)
|
||||||
|
moves = [State.parse_move(line) for line in lines]
|
||||||
|
return State(drawing, moves)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def do_move9000(crates: list[str], move: tuple[int, int, int]) -> list[str]:
|
||||||
|
"""
|
||||||
|
Moves the given crates by the provided move. Will fail if there are not enough crates
|
||||||
|
in the from stack
|
||||||
|
"""
|
||||||
|
for _ in range(move[0]):
|
||||||
|
crates[move[2]] += crates[move[1]][-1]
|
||||||
|
crates[move[1]] = crates[move[1]][:-1]
|
||||||
|
|
||||||
|
return crates
|
||||||
|
|
||||||
|
def all_moves9000(self) -> list[str]:
|
||||||
|
crates = self.crates
|
||||||
|
for move in self.moves:
|
||||||
|
crates = State.do_move9000(crates, move)
|
||||||
|
return crates
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def do_move9001(crates: list[str], move: tuple[int, int, int]) -> list[str]:
|
||||||
|
"""
|
||||||
|
Moves the given crates by the provided move. Will fail if there are not enough crates
|
||||||
|
in the from stack
|
||||||
|
"""
|
||||||
|
crates[move[2]] += crates[move[1]][-move[0]:]
|
||||||
|
crates[move[1]] = crates[move[1]][:-move[0]]
|
||||||
|
return crates
|
||||||
|
|
||||||
|
def all_moves9001(self) -> list[str]:
|
||||||
|
crates = self.crates
|
||||||
|
for move in self.moves:
|
||||||
|
crates = State.do_move9001(crates, move)
|
||||||
|
return crates
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def top(crates: list[str]) -> str:
|
||||||
|
""" Lists the last item in the given stacks. Fails if any stack is empty """
|
||||||
|
return ''.join(stack[-1] for stack in crates)
|
||||||
76
advent/days/day05/test_solution.py
Normal file
76
advent/days/day05/test_solution.py
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
from advent.common import utils
|
||||||
|
|
||||||
|
from .solution import day_num, part1, part2, State
|
||||||
|
|
||||||
|
|
||||||
|
def test_part1():
|
||||||
|
data = utils.read_data(day_num, 'test01.txt')
|
||||||
|
expected = "CMZ"
|
||||||
|
result = part1(data)
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_part2():
|
||||||
|
data = utils.read_data(day_num, 'test01.txt')
|
||||||
|
expected = "MCD"
|
||||||
|
result = part2(data)
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_line():
|
||||||
|
input = " [D] "
|
||||||
|
expected = [None, 'D', None]
|
||||||
|
result = State.parse_crate_line(input)
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_line2():
|
||||||
|
input = "[Z] [M] [P]"
|
||||||
|
expected = ["Z", 'M', "P"]
|
||||||
|
result = State.parse_crate_line(input)
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_drawing():
|
||||||
|
data = utils.read_data(day_num, 'test01.txt')
|
||||||
|
expected = ["ZN", "MCD", "P"]
|
||||||
|
result = State.parse_drawing(data)
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_move():
|
||||||
|
input = "move 1 from 2 to 1"
|
||||||
|
expected = 1, 1, 0
|
||||||
|
result = State.parse_move(input)
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_all():
|
||||||
|
data = utils.read_data(day_num, 'test01.txt')
|
||||||
|
expected = State(["ZN", "MCD", "P"], [(1, 1, 0), (3, 0, 2), (2, 1, 0), (1, 0, 1)])
|
||||||
|
result = State.parse(data)
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_step():
|
||||||
|
data = utils.read_data(day_num, 'test01.txt')
|
||||||
|
state = State.parse(data)
|
||||||
|
expected = ["ZND", "MC", "P"]
|
||||||
|
result = State.do_move9000(state.crates, state.moves[0])
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_all_moves():
|
||||||
|
data = utils.read_data(day_num, 'test01.txt')
|
||||||
|
state = State.parse(data)
|
||||||
|
expected = ["C", "M", "PDNZ"]
|
||||||
|
result = state.all_moves9000()
|
||||||
|
assert result == expected
|
||||||
|
|
||||||
|
|
||||||
|
def test_all_moves9001():
|
||||||
|
data = utils.read_data(day_num, 'test01.txt')
|
||||||
|
state = State.parse(data)
|
||||||
|
expected = ["M", "C", "PZND"]
|
||||||
|
result = state.all_moves9001()
|
||||||
|
assert result == expected
|
||||||
Loading…
Add table
Add a link
Reference in a new issue