part one working although scrappy
This commit is contained in:
@@ -0,0 +1 @@
|
||||
/target
|
||||
Generated
+7
@@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "day-5"
|
||||
version = "0.1.0"
|
||||
@@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "day-5"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
@@ -0,0 +1,513 @@
|
||||
[N] [Q] [N]
|
||||
[R] [F] [Q] [G] [M]
|
||||
[J] [Z] [T] [R] [H] [J]
|
||||
[T] [H] [G] [R] [B] [N] [T]
|
||||
[Z] [J] [J] [G] [F] [Z] [S] [M]
|
||||
[B] [N] [N] [N] [Q] [W] [L] [Q] [S]
|
||||
[D] [S] [R] [V] [T] [C] [C] [N] [G]
|
||||
[F] [R] [C] [F] [L] [Q] [F] [D] [P]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 3 from 9 to 4
|
||||
move 2 from 5 to 2
|
||||
move 8 from 1 to 9
|
||||
move 4 from 7 to 1
|
||||
move 5 from 3 to 8
|
||||
move 3 from 3 to 7
|
||||
move 11 from 8 to 3
|
||||
move 7 from 3 to 6
|
||||
move 2 from 5 to 9
|
||||
move 3 from 1 to 6
|
||||
move 6 from 2 to 4
|
||||
move 6 from 7 to 5
|
||||
move 1 from 6 to 1
|
||||
move 1 from 9 to 4
|
||||
move 16 from 4 to 9
|
||||
move 2 from 1 to 2
|
||||
move 1 from 4 to 6
|
||||
move 1 from 3 to 7
|
||||
move 2 from 2 to 4
|
||||
move 1 from 7 to 9
|
||||
move 22 from 9 to 8
|
||||
move 1 from 6 to 3
|
||||
move 18 from 8 to 5
|
||||
move 3 from 8 to 2
|
||||
move 3 from 2 to 9
|
||||
move 13 from 6 to 7
|
||||
move 1 from 6 to 7
|
||||
move 4 from 3 to 6
|
||||
move 2 from 6 to 3
|
||||
move 2 from 3 to 8
|
||||
move 3 from 7 to 8
|
||||
move 14 from 5 to 2
|
||||
move 3 from 2 to 5
|
||||
move 2 from 8 to 4
|
||||
move 4 from 8 to 6
|
||||
move 4 from 6 to 4
|
||||
move 11 from 5 to 2
|
||||
move 3 from 9 to 2
|
||||
move 7 from 2 to 3
|
||||
move 11 from 7 to 2
|
||||
move 1 from 5 to 7
|
||||
move 5 from 6 to 8
|
||||
move 30 from 2 to 7
|
||||
move 23 from 7 to 2
|
||||
move 4 from 3 to 4
|
||||
move 3 from 9 to 6
|
||||
move 4 from 8 to 2
|
||||
move 1 from 8 to 2
|
||||
move 2 from 7 to 9
|
||||
move 4 from 2 to 3
|
||||
move 1 from 5 to 9
|
||||
move 6 from 4 to 7
|
||||
move 5 from 3 to 6
|
||||
move 1 from 3 to 6
|
||||
move 1 from 9 to 2
|
||||
move 16 from 2 to 5
|
||||
move 7 from 7 to 6
|
||||
move 9 from 2 to 1
|
||||
move 2 from 1 to 4
|
||||
move 8 from 5 to 3
|
||||
move 5 from 7 to 4
|
||||
move 1 from 9 to 8
|
||||
move 9 from 3 to 6
|
||||
move 25 from 6 to 8
|
||||
move 2 from 9 to 5
|
||||
move 3 from 4 to 2
|
||||
move 7 from 4 to 1
|
||||
move 1 from 8 to 7
|
||||
move 6 from 5 to 2
|
||||
move 11 from 8 to 5
|
||||
move 1 from 7 to 9
|
||||
move 10 from 1 to 2
|
||||
move 6 from 5 to 1
|
||||
move 1 from 4 to 2
|
||||
move 13 from 8 to 1
|
||||
move 17 from 1 to 2
|
||||
move 5 from 1 to 9
|
||||
move 1 from 8 to 4
|
||||
move 1 from 1 to 3
|
||||
move 1 from 3 to 6
|
||||
move 1 from 9 to 3
|
||||
move 2 from 4 to 5
|
||||
move 1 from 4 to 8
|
||||
move 1 from 9 to 1
|
||||
move 8 from 5 to 7
|
||||
move 1 from 8 to 1
|
||||
move 7 from 7 to 6
|
||||
move 2 from 1 to 2
|
||||
move 1 from 3 to 6
|
||||
move 2 from 5 to 4
|
||||
move 8 from 2 to 1
|
||||
move 1 from 9 to 7
|
||||
move 1 from 5 to 1
|
||||
move 2 from 7 to 3
|
||||
move 2 from 3 to 7
|
||||
move 2 from 7 to 8
|
||||
move 2 from 1 to 5
|
||||
move 3 from 9 to 2
|
||||
move 2 from 8 to 9
|
||||
move 1 from 9 to 2
|
||||
move 1 from 9 to 8
|
||||
move 1 from 8 to 7
|
||||
move 6 from 6 to 5
|
||||
move 1 from 6 to 2
|
||||
move 2 from 4 to 5
|
||||
move 2 from 6 to 8
|
||||
move 1 from 7 to 1
|
||||
move 2 from 8 to 4
|
||||
move 11 from 2 to 5
|
||||
move 18 from 5 to 6
|
||||
move 6 from 2 to 6
|
||||
move 10 from 2 to 7
|
||||
move 1 from 4 to 3
|
||||
move 7 from 2 to 8
|
||||
move 7 from 1 to 4
|
||||
move 6 from 7 to 8
|
||||
move 2 from 7 to 3
|
||||
move 8 from 4 to 7
|
||||
move 1 from 1 to 3
|
||||
move 1 from 2 to 1
|
||||
move 4 from 7 to 1
|
||||
move 4 from 1 to 3
|
||||
move 2 from 3 to 9
|
||||
move 2 from 5 to 4
|
||||
move 1 from 2 to 1
|
||||
move 2 from 1 to 5
|
||||
move 1 from 3 to 1
|
||||
move 2 from 5 to 2
|
||||
move 1 from 2 to 6
|
||||
move 5 from 7 to 4
|
||||
move 1 from 1 to 2
|
||||
move 10 from 8 to 1
|
||||
move 2 from 2 to 7
|
||||
move 2 from 7 to 1
|
||||
move 1 from 7 to 9
|
||||
move 1 from 5 to 7
|
||||
move 3 from 8 to 7
|
||||
move 3 from 3 to 6
|
||||
move 3 from 7 to 1
|
||||
move 5 from 1 to 4
|
||||
move 1 from 7 to 6
|
||||
move 22 from 6 to 3
|
||||
move 2 from 6 to 2
|
||||
move 19 from 3 to 4
|
||||
move 15 from 4 to 8
|
||||
move 9 from 8 to 4
|
||||
move 5 from 6 to 8
|
||||
move 2 from 2 to 8
|
||||
move 2 from 9 to 4
|
||||
move 7 from 1 to 5
|
||||
move 1 from 1 to 3
|
||||
move 1 from 9 to 7
|
||||
move 5 from 8 to 3
|
||||
move 4 from 8 to 1
|
||||
move 5 from 1 to 5
|
||||
move 10 from 4 to 3
|
||||
move 3 from 4 to 2
|
||||
move 2 from 8 to 3
|
||||
move 12 from 4 to 8
|
||||
move 1 from 7 to 6
|
||||
move 3 from 2 to 9
|
||||
move 2 from 4 to 5
|
||||
move 5 from 3 to 7
|
||||
move 1 from 7 to 2
|
||||
move 1 from 1 to 6
|
||||
move 1 from 7 to 2
|
||||
move 15 from 3 to 8
|
||||
move 10 from 5 to 6
|
||||
move 3 from 7 to 8
|
||||
move 1 from 5 to 8
|
||||
move 1 from 2 to 3
|
||||
move 7 from 6 to 1
|
||||
move 3 from 5 to 3
|
||||
move 5 from 3 to 5
|
||||
move 3 from 5 to 4
|
||||
move 2 from 4 to 9
|
||||
move 2 from 3 to 5
|
||||
move 14 from 8 to 5
|
||||
move 1 from 9 to 1
|
||||
move 16 from 5 to 3
|
||||
move 16 from 3 to 6
|
||||
move 2 from 9 to 8
|
||||
move 21 from 6 to 7
|
||||
move 2 from 1 to 7
|
||||
move 1 from 2 to 7
|
||||
move 4 from 1 to 7
|
||||
move 1 from 4 to 7
|
||||
move 16 from 8 to 5
|
||||
move 20 from 7 to 4
|
||||
move 1 from 9 to 8
|
||||
move 1 from 7 to 4
|
||||
move 3 from 8 to 6
|
||||
move 1 from 9 to 1
|
||||
move 2 from 1 to 4
|
||||
move 2 from 5 to 2
|
||||
move 5 from 4 to 7
|
||||
move 1 from 6 to 9
|
||||
move 11 from 7 to 6
|
||||
move 2 from 7 to 5
|
||||
move 12 from 6 to 2
|
||||
move 13 from 2 to 1
|
||||
move 1 from 2 to 3
|
||||
move 1 from 8 to 4
|
||||
move 6 from 4 to 1
|
||||
move 1 from 6 to 7
|
||||
move 7 from 4 to 9
|
||||
move 8 from 9 to 3
|
||||
move 2 from 8 to 3
|
||||
move 10 from 5 to 4
|
||||
move 11 from 1 to 8
|
||||
move 1 from 1 to 3
|
||||
move 5 from 1 to 8
|
||||
move 8 from 5 to 6
|
||||
move 13 from 8 to 9
|
||||
move 12 from 3 to 5
|
||||
move 12 from 5 to 9
|
||||
move 1 from 7 to 9
|
||||
move 1 from 1 to 2
|
||||
move 1 from 1 to 4
|
||||
move 3 from 8 to 5
|
||||
move 1 from 2 to 5
|
||||
move 1 from 4 to 8
|
||||
move 5 from 6 to 3
|
||||
move 1 from 8 to 4
|
||||
move 13 from 4 to 7
|
||||
move 3 from 7 to 6
|
||||
move 1 from 1 to 4
|
||||
move 4 from 4 to 2
|
||||
move 1 from 6 to 3
|
||||
move 2 from 5 to 9
|
||||
move 2 from 5 to 9
|
||||
move 1 from 4 to 8
|
||||
move 6 from 9 to 4
|
||||
move 22 from 9 to 2
|
||||
move 8 from 7 to 4
|
||||
move 7 from 2 to 1
|
||||
move 3 from 3 to 8
|
||||
move 2 from 6 to 7
|
||||
move 14 from 4 to 2
|
||||
move 2 from 6 to 1
|
||||
move 1 from 8 to 7
|
||||
move 3 from 3 to 9
|
||||
move 1 from 8 to 4
|
||||
move 3 from 1 to 9
|
||||
move 3 from 9 to 3
|
||||
move 31 from 2 to 8
|
||||
move 8 from 8 to 4
|
||||
move 1 from 9 to 1
|
||||
move 9 from 4 to 5
|
||||
move 7 from 5 to 6
|
||||
move 2 from 5 to 1
|
||||
move 1 from 2 to 1
|
||||
move 1 from 7 to 9
|
||||
move 1 from 2 to 9
|
||||
move 2 from 6 to 4
|
||||
move 4 from 7 to 4
|
||||
move 4 from 9 to 8
|
||||
move 6 from 4 to 1
|
||||
move 1 from 3 to 2
|
||||
move 1 from 3 to 6
|
||||
move 1 from 9 to 2
|
||||
move 2 from 2 to 4
|
||||
move 1 from 9 to 1
|
||||
move 1 from 3 to 1
|
||||
move 17 from 1 to 9
|
||||
move 4 from 6 to 2
|
||||
move 1 from 9 to 7
|
||||
move 4 from 9 to 7
|
||||
move 1 from 8 to 4
|
||||
move 3 from 7 to 6
|
||||
move 1 from 4 to 9
|
||||
move 10 from 8 to 5
|
||||
move 6 from 6 to 5
|
||||
move 1 from 7 to 2
|
||||
move 1 from 1 to 4
|
||||
move 1 from 4 to 5
|
||||
move 9 from 8 to 3
|
||||
move 4 from 3 to 9
|
||||
move 1 from 4 to 6
|
||||
move 1 from 6 to 5
|
||||
move 1 from 4 to 8
|
||||
move 2 from 3 to 8
|
||||
move 1 from 3 to 8
|
||||
move 3 from 8 to 9
|
||||
move 5 from 2 to 9
|
||||
move 1 from 7 to 9
|
||||
move 5 from 8 to 7
|
||||
move 3 from 8 to 4
|
||||
move 2 from 8 to 5
|
||||
move 24 from 9 to 7
|
||||
move 1 from 3 to 5
|
||||
move 2 from 9 to 4
|
||||
move 22 from 7 to 9
|
||||
move 1 from 3 to 4
|
||||
move 6 from 4 to 6
|
||||
move 4 from 6 to 7
|
||||
move 10 from 5 to 3
|
||||
move 8 from 3 to 5
|
||||
move 2 from 3 to 4
|
||||
move 2 from 4 to 6
|
||||
move 10 from 7 to 3
|
||||
move 21 from 9 to 1
|
||||
move 2 from 3 to 4
|
||||
move 4 from 3 to 8
|
||||
move 2 from 4 to 8
|
||||
move 1 from 7 to 8
|
||||
move 4 from 6 to 8
|
||||
move 3 from 5 to 4
|
||||
move 8 from 8 to 2
|
||||
move 18 from 1 to 6
|
||||
move 3 from 4 to 1
|
||||
move 1 from 2 to 8
|
||||
move 5 from 1 to 8
|
||||
move 3 from 3 to 6
|
||||
move 3 from 2 to 9
|
||||
move 3 from 8 to 1
|
||||
move 11 from 5 to 2
|
||||
move 3 from 8 to 7
|
||||
move 10 from 2 to 9
|
||||
move 1 from 7 to 9
|
||||
move 3 from 8 to 1
|
||||
move 2 from 7 to 8
|
||||
move 6 from 9 to 5
|
||||
move 4 from 2 to 8
|
||||
move 8 from 5 to 8
|
||||
move 1 from 3 to 7
|
||||
move 2 from 5 to 6
|
||||
move 3 from 1 to 6
|
||||
move 2 from 1 to 6
|
||||
move 4 from 9 to 8
|
||||
move 4 from 9 to 8
|
||||
move 1 from 9 to 4
|
||||
move 9 from 6 to 9
|
||||
move 16 from 6 to 9
|
||||
move 1 from 4 to 7
|
||||
move 1 from 2 to 9
|
||||
move 5 from 8 to 5
|
||||
move 4 from 5 to 1
|
||||
move 6 from 1 to 7
|
||||
move 12 from 8 to 4
|
||||
move 5 from 8 to 1
|
||||
move 6 from 9 to 3
|
||||
move 1 from 1 to 6
|
||||
move 2 from 5 to 8
|
||||
move 12 from 4 to 7
|
||||
move 2 from 8 to 4
|
||||
move 1 from 4 to 8
|
||||
move 1 from 7 to 6
|
||||
move 1 from 4 to 6
|
||||
move 14 from 7 to 1
|
||||
move 3 from 3 to 2
|
||||
move 7 from 9 to 7
|
||||
move 3 from 3 to 5
|
||||
move 15 from 1 to 2
|
||||
move 2 from 5 to 9
|
||||
move 1 from 8 to 9
|
||||
move 16 from 9 to 1
|
||||
move 1 from 5 to 9
|
||||
move 5 from 6 to 2
|
||||
move 12 from 7 to 2
|
||||
move 20 from 2 to 6
|
||||
move 10 from 2 to 6
|
||||
move 11 from 1 to 7
|
||||
move 2 from 7 to 4
|
||||
move 2 from 2 to 5
|
||||
move 1 from 2 to 3
|
||||
move 2 from 5 to 6
|
||||
move 1 from 9 to 5
|
||||
move 1 from 5 to 9
|
||||
move 25 from 6 to 7
|
||||
move 25 from 7 to 6
|
||||
move 1 from 3 to 1
|
||||
move 1 from 2 to 5
|
||||
move 1 from 4 to 3
|
||||
move 33 from 6 to 3
|
||||
move 1 from 9 to 5
|
||||
move 2 from 3 to 5
|
||||
move 28 from 3 to 9
|
||||
move 5 from 1 to 9
|
||||
move 4 from 1 to 8
|
||||
move 2 from 3 to 2
|
||||
move 2 from 8 to 1
|
||||
move 1 from 4 to 6
|
||||
move 3 from 5 to 3
|
||||
move 1 from 2 to 4
|
||||
move 2 from 2 to 8
|
||||
move 1 from 6 to 5
|
||||
move 30 from 9 to 2
|
||||
move 7 from 2 to 6
|
||||
move 1 from 1 to 3
|
||||
move 1 from 1 to 7
|
||||
move 1 from 5 to 6
|
||||
move 1 from 5 to 4
|
||||
move 5 from 7 to 4
|
||||
move 4 from 7 to 3
|
||||
move 1 from 3 to 7
|
||||
move 3 from 8 to 7
|
||||
move 8 from 3 to 1
|
||||
move 3 from 1 to 7
|
||||
move 4 from 1 to 4
|
||||
move 3 from 9 to 8
|
||||
move 8 from 6 to 2
|
||||
move 18 from 2 to 6
|
||||
move 6 from 7 to 2
|
||||
move 1 from 1 to 7
|
||||
move 3 from 4 to 7
|
||||
move 5 from 4 to 8
|
||||
move 2 from 8 to 7
|
||||
move 7 from 2 to 5
|
||||
move 5 from 2 to 7
|
||||
move 10 from 7 to 9
|
||||
move 5 from 5 to 9
|
||||
move 1 from 3 to 9
|
||||
move 5 from 2 to 6
|
||||
move 3 from 7 to 9
|
||||
move 2 from 5 to 6
|
||||
move 2 from 2 to 9
|
||||
move 2 from 8 to 7
|
||||
move 1 from 4 to 5
|
||||
move 8 from 9 to 2
|
||||
move 5 from 6 to 7
|
||||
move 4 from 9 to 1
|
||||
move 4 from 8 to 9
|
||||
move 12 from 9 to 1
|
||||
move 16 from 1 to 4
|
||||
move 12 from 6 to 2
|
||||
move 3 from 7 to 6
|
||||
move 3 from 7 to 3
|
||||
move 1 from 9 to 4
|
||||
move 12 from 4 to 5
|
||||
move 2 from 4 to 3
|
||||
move 1 from 7 to 1
|
||||
move 4 from 4 to 3
|
||||
move 1 from 8 to 2
|
||||
move 6 from 3 to 1
|
||||
move 1 from 1 to 8
|
||||
move 7 from 2 to 5
|
||||
move 1 from 8 to 1
|
||||
move 4 from 5 to 4
|
||||
move 5 from 5 to 9
|
||||
move 1 from 3 to 8
|
||||
move 1 from 9 to 7
|
||||
move 1 from 8 to 1
|
||||
move 4 from 5 to 6
|
||||
move 5 from 5 to 9
|
||||
move 7 from 9 to 5
|
||||
move 11 from 6 to 4
|
||||
move 1 from 9 to 4
|
||||
move 1 from 9 to 1
|
||||
move 1 from 7 to 2
|
||||
move 9 from 4 to 3
|
||||
move 5 from 1 to 9
|
||||
move 3 from 5 to 1
|
||||
move 5 from 9 to 8
|
||||
move 8 from 3 to 1
|
||||
move 2 from 5 to 3
|
||||
move 7 from 2 to 5
|
||||
move 1 from 6 to 4
|
||||
move 3 from 5 to 9
|
||||
move 3 from 6 to 9
|
||||
move 3 from 2 to 9
|
||||
move 5 from 3 to 6
|
||||
move 1 from 9 to 5
|
||||
move 4 from 8 to 3
|
||||
move 1 from 8 to 4
|
||||
move 8 from 1 to 3
|
||||
move 12 from 3 to 7
|
||||
move 1 from 2 to 4
|
||||
move 3 from 2 to 8
|
||||
move 6 from 7 to 6
|
||||
move 4 from 5 to 7
|
||||
move 5 from 9 to 7
|
||||
move 2 from 9 to 2
|
||||
move 1 from 9 to 5
|
||||
move 4 from 5 to 1
|
||||
move 1 from 5 to 4
|
||||
move 14 from 7 to 6
|
||||
move 1 from 1 to 7
|
||||
move 10 from 4 to 5
|
||||
move 4 from 1 to 2
|
||||
move 1 from 4 to 6
|
||||
move 1 from 7 to 4
|
||||
move 17 from 6 to 8
|
||||
move 1 from 5 to 7
|
||||
move 10 from 5 to 4
|
||||
move 1 from 2 to 6
|
||||
move 4 from 2 to 6
|
||||
move 13 from 6 to 1
|
||||
move 9 from 4 to 3
|
||||
move 2 from 2 to 4
|
||||
move 1 from 6 to 7
|
||||
move 1 from 4 to 3
|
||||
move 8 from 3 to 5
|
||||
move 1 from 3 to 4
|
||||
move 17 from 1 to 3
|
||||
move 15 from 3 to 7
|
||||
move 3 from 4 to 1
|
||||
move 6 from 8 to 9
|
||||
move 6 from 9 to 1
|
||||
move 2 from 3 to 1
|
||||
move 2 from 5 to 2
|
||||
move 6 from 7 to 6
|
||||
move 3 from 6 to 9
|
||||
+266
@@ -0,0 +1,266 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
// enum that converts string letter to enum rep
|
||||
// all capital letters in alphabet
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
enum Crate {
|
||||
A,
|
||||
B,
|
||||
C,
|
||||
D,
|
||||
E,
|
||||
F,
|
||||
G,
|
||||
H,
|
||||
I,
|
||||
J,
|
||||
K,
|
||||
L,
|
||||
M,
|
||||
N,
|
||||
O,
|
||||
P,
|
||||
Q,
|
||||
R,
|
||||
S,
|
||||
T,
|
||||
U,
|
||||
V,
|
||||
W,
|
||||
X,
|
||||
Y,
|
||||
Z,
|
||||
}
|
||||
|
||||
impl From<char> for Crate {
|
||||
fn from(value: char) -> Self {
|
||||
match value {
|
||||
'A' => Crate::A,
|
||||
'B' => Crate::B,
|
||||
'C' => Crate::C,
|
||||
'D' => Crate::D,
|
||||
'E' => Crate::E,
|
||||
'F' => Crate::F,
|
||||
'G' => Crate::G,
|
||||
'H' => Crate::H,
|
||||
'I' => Crate::I,
|
||||
'J' => Crate::J,
|
||||
'K' => Crate::K,
|
||||
'L' => Crate::L,
|
||||
'M' => Crate::M,
|
||||
'N' => Crate::N,
|
||||
'O' => Crate::O,
|
||||
'P' => Crate::P,
|
||||
'Q' => Crate::Q,
|
||||
'R' => Crate::R,
|
||||
'S' => Crate::S,
|
||||
'T' => Crate::T,
|
||||
'U' => Crate::U,
|
||||
'V' => Crate::V,
|
||||
'W' => Crate::W,
|
||||
'X' => Crate::X,
|
||||
'Y' => Crate::Y,
|
||||
'Z' => Crate::Z,
|
||||
_ => panic!("Invalid crate letter"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// the stack number to the crates in that stack
|
||||
// crates are in order from bottom to top
|
||||
type Stacks = HashMap<u32, Vec<Crate>>;
|
||||
|
||||
fn get_stacks() -> Stacks {
|
||||
let mut stacks: Stacks = HashMap::new();
|
||||
|
||||
stacks.insert(
|
||||
1,
|
||||
vec![
|
||||
Crate::F,
|
||||
Crate::D,
|
||||
Crate::B,
|
||||
Crate::Z,
|
||||
Crate::T,
|
||||
Crate::J,
|
||||
Crate::R,
|
||||
Crate::N,
|
||||
],
|
||||
);
|
||||
stacks.insert(2, vec![Crate::R, Crate::S, Crate::N, Crate::J, Crate::H]);
|
||||
stacks.insert(
|
||||
3,
|
||||
vec![
|
||||
Crate::C,
|
||||
Crate::R,
|
||||
Crate::N,
|
||||
Crate::J,
|
||||
Crate::G,
|
||||
Crate::Z,
|
||||
Crate::F,
|
||||
Crate::Q,
|
||||
],
|
||||
);
|
||||
stacks.insert(
|
||||
4,
|
||||
vec![
|
||||
Crate::F,
|
||||
Crate::V,
|
||||
Crate::N,
|
||||
Crate::G,
|
||||
Crate::R,
|
||||
Crate::T,
|
||||
Crate::Q,
|
||||
],
|
||||
);
|
||||
stacks.insert(5, vec![Crate::L, Crate::T, Crate::Q, Crate::F]);
|
||||
stacks.insert(
|
||||
6,
|
||||
vec![
|
||||
Crate::Q,
|
||||
Crate::C,
|
||||
Crate::W,
|
||||
Crate::Z,
|
||||
Crate::B,
|
||||
Crate::R,
|
||||
Crate::G,
|
||||
Crate::N,
|
||||
],
|
||||
);
|
||||
stacks.insert(
|
||||
7,
|
||||
vec![
|
||||
Crate::F,
|
||||
Crate::C,
|
||||
Crate::L,
|
||||
Crate::S,
|
||||
Crate::N,
|
||||
Crate::H,
|
||||
Crate::M,
|
||||
],
|
||||
);
|
||||
stacks.insert(
|
||||
8,
|
||||
vec![Crate::D, Crate::N, Crate::Q, Crate::M, Crate::T, Crate::J],
|
||||
);
|
||||
stacks.insert(9, vec![Crate::P, Crate::G, Crate::S]);
|
||||
|
||||
stacks
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Move {
|
||||
number_crates: u32,
|
||||
from_stack: u32,
|
||||
to_stack: u32,
|
||||
}
|
||||
|
||||
fn read_moves() -> Vec<Move> {
|
||||
let input = std::fs::read_to_string("input.txt").unwrap();
|
||||
let mut moves: Vec<Move> = Vec::new();
|
||||
|
||||
for line in input.lines().skip(10) {
|
||||
let mut split = line.split_whitespace();
|
||||
split.next().unwrap(); // "move"
|
||||
let number_crates = split.next().unwrap().parse::<u32>().unwrap();
|
||||
split.next().unwrap(); // "from"
|
||||
let from_stack = split.next().unwrap().parse::<u32>().unwrap();
|
||||
split.next().unwrap(); // "to"
|
||||
let to_stack = split.next().unwrap().parse::<u32>().unwrap();
|
||||
|
||||
moves.push(Move {
|
||||
number_crates,
|
||||
from_stack,
|
||||
to_stack,
|
||||
});
|
||||
}
|
||||
|
||||
moves
|
||||
}
|
||||
|
||||
// part 1: get the last crate in each stack
|
||||
fn perform_moves(stacks: &mut Stacks, moves: Vec<Move>) {
|
||||
for m in moves {
|
||||
let from_stack_crates = stacks.get_mut(&m.from_stack).unwrap();
|
||||
// remove the last m.number_crates from the stack
|
||||
let mut crates_to_move =
|
||||
from_stack_crates.split_off(from_stack_crates.len() - m.number_crates as usize);
|
||||
|
||||
// reverse the crates so that the first one taken is on the bottom
|
||||
crates_to_move.reverse();
|
||||
|
||||
// add the crates to the to_stack
|
||||
let to_stack_crates = stacks.get_mut(&m.to_stack).unwrap();
|
||||
to_stack_crates.append(&mut crates_to_move);
|
||||
}
|
||||
}
|
||||
|
||||
// do not use, arbitrary order
|
||||
fn get_the_last_one_in_each_stack(stacks: &Stacks) -> Vec<&Crate> {
|
||||
let mut last_crates: Vec<&Crate> = Vec::new();
|
||||
|
||||
for (stack, crates) in stacks {
|
||||
println!(
|
||||
"stack: {:?}, last_crate: {:?}",
|
||||
stack,
|
||||
crates.last().unwrap()
|
||||
);
|
||||
last_crates.push(crates.last().unwrap());
|
||||
}
|
||||
|
||||
last_crates
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
|
||||
let moves = read_moves();
|
||||
let mut stacks = get_stacks();
|
||||
println!("before moves: {:?}", stacks);
|
||||
|
||||
perform_moves(&mut stacks, moves);
|
||||
get_the_last_one_in_each_stack(&stacks);
|
||||
// QNNTGTPVN
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
// todo: finish writing helper to test equality
|
||||
#[test]
|
||||
fn test() {
|
||||
let mut stacks = HashMap::new();
|
||||
stacks.insert(1, vec![Crate::Z, Crate::N]);
|
||||
stacks.insert(2, vec![Crate::M, Crate::C, Crate::D]);
|
||||
stacks.insert(3, vec![Crate::P]);
|
||||
|
||||
let moves = vec![
|
||||
Move {
|
||||
number_crates: 1,
|
||||
from_stack: 2,
|
||||
to_stack: 1,
|
||||
},
|
||||
Move {
|
||||
number_crates: 3,
|
||||
from_stack: 1,
|
||||
to_stack: 3,
|
||||
},
|
||||
Move {
|
||||
number_crates: 2,
|
||||
from_stack: 2,
|
||||
to_stack: 1,
|
||||
},
|
||||
Move {
|
||||
number_crates: 1,
|
||||
from_stack: 1,
|
||||
to_stack: 2,
|
||||
},
|
||||
];
|
||||
|
||||
println!("before moves {:?}", &stacks);
|
||||
perform_moves(&mut stacks, moves);
|
||||
eprintln!("after moves {:?}", &stacks);
|
||||
|
||||
assert_eq!(1, 1);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user