Add solution for 2022 day 05
This commit is contained in:
parent
5878d30713
commit
0bd5d6a220
4
2022/Cargo.lock
generated
4
2022/Cargo.lock
generated
@ -21,6 +21,10 @@ dependencies = [
|
||||
name = "aoc-2022-04"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "aoc-2022-05"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.8.0"
|
||||
|
@ -1,5 +1,5 @@
|
||||
[workspace]
|
||||
members = ["./day-01", "./day-02", "./day-03", "./day-04"]
|
||||
members = ["./day-01", "./day-02", "./day-03", "./day-04", "./day-05"]
|
||||
|
||||
|
||||
[workspace.package]
|
||||
|
@ -8,7 +8,7 @@
|
||||
| 02 | ✓ | ✓ | [Rust] |
|
||||
| 03 | ✓ | ✓ | [Rust] |
|
||||
| 04 | ✓ | ✓ | [Rust] |
|
||||
| 05 | | | |
|
||||
| 05 | ✓ | ✓ | [Rust] |
|
||||
| 06 | | | |
|
||||
| 07 | | | |
|
||||
| 08 | | | |
|
||||
|
6
2022/day-05/Cargo.toml
Normal file
6
2022/day-05/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "aoc-2022-05"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
5
2022/day-05/Justfile
Normal file
5
2022/day-05/Justfile
Normal file
@ -0,0 +1,5 @@
|
||||
@part PART INPUT_FILE="inputs/puzzle.txt":
|
||||
cargo --quiet run --bin part_{{PART}} -- {{INPUT_FILE}}
|
||||
|
||||
clean:
|
||||
cargo clean
|
513
2022/day-05/inputs/puzzle.txt
Normal file
513
2022/day-05/inputs/puzzle.txt
Normal file
@ -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
|
9
2022/day-05/inputs/test.txt
Normal file
9
2022/day-05/inputs/test.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
|
35
2022/day-05/src/bin/part_one.rs
Normal file
35
2022/day-05/src/bin/part_one.rs
Normal file
@ -0,0 +1,35 @@
|
||||
use std::{env, io};
|
||||
|
||||
use aoc_2022_05::{parse_file, Instruction, Stack, Stacks};
|
||||
|
||||
pub fn move_stack(stacks: &mut Stacks, (amount, from_idx, to_idx): Instruction) {
|
||||
let source = stacks.get_mut(&from_idx).unwrap();
|
||||
let mut swap = Stack::new();
|
||||
for _ in 0..amount {
|
||||
swap.push_back(source.pop_front().unwrap());
|
||||
}
|
||||
|
||||
let target = stacks.get_mut(&to_idx).unwrap();
|
||||
|
||||
for item in swap {
|
||||
target.push_front(item);
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
let infile_path = env::args().nth(1).expect("input file");
|
||||
|
||||
let (mut stacks, instructions) = parse_file(infile_path)?;
|
||||
|
||||
for instruction in instructions {
|
||||
move_stack(&mut stacks, instruction);
|
||||
}
|
||||
|
||||
for (_, stack) in stacks {
|
||||
let first = stack.front().unwrap();
|
||||
print!("{first}");
|
||||
}
|
||||
println!();
|
||||
|
||||
Ok(())
|
||||
}
|
35
2022/day-05/src/bin/part_two.rs
Normal file
35
2022/day-05/src/bin/part_two.rs
Normal file
@ -0,0 +1,35 @@
|
||||
use std::{env, io};
|
||||
|
||||
use aoc_2022_05::{parse_file, Instruction, Stack, Stacks};
|
||||
|
||||
pub fn move_stack(stacks: &mut Stacks, (amount, from_idx, to_idx): Instruction) {
|
||||
let source = stacks.get_mut(&from_idx).unwrap();
|
||||
let mut swap = Stack::new();
|
||||
for _ in 0..amount {
|
||||
swap.push_front(source.pop_front().unwrap());
|
||||
}
|
||||
|
||||
let target = stacks.get_mut(&to_idx).unwrap();
|
||||
|
||||
for item in swap {
|
||||
target.push_front(item);
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> io::Result<()> {
|
||||
let infile_path = env::args().nth(1).expect("input file");
|
||||
|
||||
let (mut stacks, instructions) = parse_file(infile_path)?;
|
||||
|
||||
for instruction in instructions {
|
||||
move_stack(&mut stacks, instruction);
|
||||
}
|
||||
|
||||
for (_, stack) in stacks {
|
||||
let first = stack.front().unwrap();
|
||||
print!("{first}");
|
||||
}
|
||||
println!();
|
||||
|
||||
Ok(())
|
||||
}
|
59
2022/day-05/src/lib.rs
Normal file
59
2022/day-05/src/lib.rs
Normal file
@ -0,0 +1,59 @@
|
||||
use std::{
|
||||
collections::{BTreeMap, VecDeque},
|
||||
fs::File,
|
||||
io::{self, BufRead, BufReader},
|
||||
path::Path,
|
||||
};
|
||||
|
||||
pub type Stack = VecDeque<char>;
|
||||
pub type Stacks = BTreeMap<usize, Stack>;
|
||||
pub type Instruction = (usize, usize, usize);
|
||||
pub type Instructions = Vec<Instruction>;
|
||||
|
||||
pub fn parse_file<P>(path: P) -> io::Result<(Stacks, Instructions)>
|
||||
where
|
||||
P: AsRef<Path>,
|
||||
{
|
||||
let file = File::open(path)?;
|
||||
let reader = BufReader::new(file);
|
||||
|
||||
let mut stacks = Stacks::new();
|
||||
let mut instructions = Instructions::new();
|
||||
let mut reading_instructions = false;
|
||||
|
||||
for line in reader.lines() {
|
||||
let line = line?;
|
||||
|
||||
if line.is_empty() {
|
||||
reading_instructions = true;
|
||||
} else if reading_instructions {
|
||||
let instruction = parse_instruction(&line).expect("invalid instruction");
|
||||
instructions.push(instruction);
|
||||
} else {
|
||||
for (index, item) in line.chars().skip(1).step_by(4).enumerate() {
|
||||
if item != ' ' && !item.is_numeric() {
|
||||
stacks
|
||||
.entry(index + 1)
|
||||
.and_modify(|v: &mut VecDeque<char>| v.push_back(item))
|
||||
.or_insert_with(|| {
|
||||
let mut stack = VecDeque::new();
|
||||
stack.push_back(item);
|
||||
stack
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok((stacks, instructions))
|
||||
}
|
||||
|
||||
fn parse_instruction(line: &str) -> Option<Instruction> {
|
||||
let parts = line.split_whitespace().collect::<Vec<_>>();
|
||||
|
||||
let amount = parts[1].parse().unwrap();
|
||||
let from_idx = parts[3].parse().unwrap();
|
||||
let to_idx = parts[5].parse().unwrap();
|
||||
|
||||
Some((amount, from_idx, to_idx))
|
||||
}
|
Loading…
Reference in New Issue
Block a user