Solve day 5
This commit is contained in:
parent
5c01353113
commit
690f75ae43
5 changed files with 649 additions and 0 deletions
33
Cargo.lock
generated
33
Cargo.lock
generated
|
@ -2,11 +2,21 @@
|
|||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "0.7.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aoc2022"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"itertools",
|
||||
"regex",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -23,3 +33,26 @@ checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
|
|||
dependencies = [
|
||||
"either",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.6.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
|
||||
|
|
|
@ -5,3 +5,4 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
itertools = "0.10.5"
|
||||
regex = "1.7.0"
|
||||
|
|
514
input/05
Normal file
514
input/05
Normal file
|
@ -0,0 +1,514 @@
|
|||
[S] [C] [Z]
|
||||
[F] [J] [P] [T] [N]
|
||||
[G] [H] [G] [Q] [G] [D]
|
||||
[V] [V] [D] [G] [F] [D] [V]
|
||||
[R] [B] [F] [N] [N] [Q] [L] [S]
|
||||
[J] [M] [M] [P] [H] [V] [B] [B] [D]
|
||||
[L] [P] [H] [D] [L] [F] [D] [J] [L]
|
||||
[D] [T] [V] [M] [J] [N] [F] [M] [G]
|
||||
1 2 3 4 5 6 7 8 9
|
||||
|
||||
move 3 from 4 to 6
|
||||
move 1 from 5 to 8
|
||||
move 3 from 7 to 3
|
||||
move 4 from 5 to 7
|
||||
move 1 from 7 to 8
|
||||
move 3 from 9 to 4
|
||||
move 2 from 8 to 2
|
||||
move 4 from 4 to 5
|
||||
move 2 from 5 to 1
|
||||
move 2 from 5 to 6
|
||||
move 7 from 8 to 1
|
||||
move 9 from 3 to 9
|
||||
move 11 from 6 to 5
|
||||
move 2 from 6 to 7
|
||||
move 12 from 1 to 4
|
||||
move 10 from 2 to 9
|
||||
move 2 from 3 to 9
|
||||
move 1 from 7 to 5
|
||||
move 4 from 7 to 6
|
||||
move 2 from 6 to 1
|
||||
move 5 from 1 to 6
|
||||
move 10 from 9 to 1
|
||||
move 9 from 9 to 8
|
||||
move 13 from 4 to 3
|
||||
move 7 from 6 to 2
|
||||
move 2 from 8 to 5
|
||||
move 9 from 3 to 9
|
||||
move 8 from 9 to 8
|
||||
move 4 from 8 to 4
|
||||
move 1 from 7 to 5
|
||||
move 3 from 9 to 1
|
||||
move 7 from 2 to 1
|
||||
move 1 from 3 to 1
|
||||
move 1 from 3 to 6
|
||||
move 1 from 6 to 1
|
||||
move 2 from 3 to 6
|
||||
move 5 from 4 to 1
|
||||
move 1 from 6 to 1
|
||||
move 3 from 8 to 7
|
||||
move 8 from 8 to 4
|
||||
move 3 from 5 to 4
|
||||
move 1 from 6 to 7
|
||||
move 1 from 5 to 8
|
||||
move 4 from 5 to 2
|
||||
move 7 from 5 to 8
|
||||
move 3 from 2 to 7
|
||||
move 7 from 4 to 8
|
||||
move 11 from 8 to 4
|
||||
move 15 from 4 to 1
|
||||
move 25 from 1 to 6
|
||||
move 4 from 8 to 7
|
||||
move 1 from 2 to 4
|
||||
move 11 from 6 to 4
|
||||
move 12 from 6 to 3
|
||||
move 1 from 1 to 9
|
||||
move 1 from 9 to 8
|
||||
move 16 from 1 to 3
|
||||
move 1 from 8 to 7
|
||||
move 12 from 4 to 6
|
||||
move 9 from 6 to 5
|
||||
move 3 from 6 to 5
|
||||
move 6 from 7 to 5
|
||||
move 3 from 3 to 5
|
||||
move 2 from 6 to 3
|
||||
move 11 from 5 to 8
|
||||
move 2 from 8 to 3
|
||||
move 2 from 1 to 4
|
||||
move 7 from 3 to 1
|
||||
move 2 from 4 to 6
|
||||
move 2 from 6 to 2
|
||||
move 5 from 7 to 3
|
||||
move 1 from 1 to 6
|
||||
move 1 from 1 to 8
|
||||
move 2 from 2 to 5
|
||||
move 1 from 7 to 4
|
||||
move 1 from 1 to 2
|
||||
move 10 from 3 to 5
|
||||
move 11 from 3 to 6
|
||||
move 1 from 4 to 9
|
||||
move 1 from 9 to 4
|
||||
move 1 from 4 to 2
|
||||
move 2 from 5 to 9
|
||||
move 2 from 2 to 8
|
||||
move 2 from 1 to 6
|
||||
move 2 from 1 to 2
|
||||
move 2 from 3 to 6
|
||||
move 3 from 8 to 1
|
||||
move 3 from 1 to 4
|
||||
move 7 from 8 to 3
|
||||
move 2 from 9 to 5
|
||||
move 2 from 4 to 9
|
||||
move 7 from 5 to 6
|
||||
move 2 from 8 to 6
|
||||
move 1 from 4 to 8
|
||||
move 2 from 2 to 4
|
||||
move 21 from 6 to 3
|
||||
move 10 from 5 to 7
|
||||
move 7 from 7 to 6
|
||||
move 1 from 9 to 3
|
||||
move 1 from 4 to 9
|
||||
move 1 from 9 to 4
|
||||
move 1 from 8 to 4
|
||||
move 8 from 6 to 4
|
||||
move 1 from 4 to 5
|
||||
move 1 from 5 to 8
|
||||
move 4 from 3 to 6
|
||||
move 1 from 8 to 2
|
||||
move 1 from 4 to 2
|
||||
move 2 from 7 to 3
|
||||
move 2 from 2 to 7
|
||||
move 22 from 3 to 5
|
||||
move 4 from 6 to 2
|
||||
move 2 from 6 to 9
|
||||
move 7 from 3 to 9
|
||||
move 6 from 9 to 1
|
||||
move 18 from 5 to 3
|
||||
move 2 from 5 to 4
|
||||
move 20 from 3 to 5
|
||||
move 3 from 7 to 3
|
||||
move 5 from 1 to 2
|
||||
move 11 from 5 to 7
|
||||
move 1 from 1 to 7
|
||||
move 3 from 9 to 3
|
||||
move 16 from 5 to 8
|
||||
move 7 from 8 to 7
|
||||
move 1 from 9 to 2
|
||||
move 8 from 2 to 3
|
||||
move 2 from 2 to 4
|
||||
move 3 from 3 to 1
|
||||
move 9 from 3 to 8
|
||||
move 1 from 6 to 3
|
||||
move 9 from 7 to 3
|
||||
move 3 from 1 to 8
|
||||
move 1 from 7 to 9
|
||||
move 1 from 9 to 4
|
||||
move 1 from 7 to 5
|
||||
move 10 from 4 to 5
|
||||
move 2 from 4 to 2
|
||||
move 19 from 8 to 5
|
||||
move 1 from 8 to 3
|
||||
move 4 from 3 to 5
|
||||
move 2 from 4 to 8
|
||||
move 4 from 7 to 8
|
||||
move 4 from 3 to 9
|
||||
move 4 from 7 to 6
|
||||
move 2 from 2 to 5
|
||||
move 2 from 3 to 2
|
||||
move 6 from 8 to 7
|
||||
move 1 from 8 to 4
|
||||
move 2 from 6 to 4
|
||||
move 3 from 4 to 8
|
||||
move 3 from 9 to 2
|
||||
move 4 from 7 to 8
|
||||
move 28 from 5 to 8
|
||||
move 16 from 8 to 4
|
||||
move 11 from 8 to 4
|
||||
move 3 from 3 to 4
|
||||
move 7 from 5 to 8
|
||||
move 13 from 8 to 7
|
||||
move 1 from 5 to 6
|
||||
move 1 from 6 to 7
|
||||
move 1 from 9 to 2
|
||||
move 2 from 6 to 2
|
||||
move 12 from 4 to 9
|
||||
move 4 from 4 to 1
|
||||
move 2 from 9 to 8
|
||||
move 4 from 8 to 3
|
||||
move 3 from 4 to 5
|
||||
move 4 from 4 to 1
|
||||
move 4 from 4 to 7
|
||||
move 3 from 7 to 9
|
||||
move 5 from 9 to 7
|
||||
move 7 from 2 to 3
|
||||
move 1 from 5 to 7
|
||||
move 8 from 1 to 5
|
||||
move 1 from 2 to 4
|
||||
move 11 from 3 to 1
|
||||
move 10 from 5 to 3
|
||||
move 3 from 9 to 1
|
||||
move 3 from 9 to 6
|
||||
move 5 from 1 to 6
|
||||
move 7 from 6 to 9
|
||||
move 8 from 9 to 7
|
||||
move 9 from 3 to 4
|
||||
move 1 from 6 to 9
|
||||
move 8 from 7 to 1
|
||||
move 9 from 4 to 2
|
||||
move 2 from 1 to 6
|
||||
move 3 from 2 to 6
|
||||
move 4 from 4 to 6
|
||||
move 2 from 9 to 8
|
||||
move 2 from 1 to 2
|
||||
move 1 from 3 to 8
|
||||
move 2 from 8 to 4
|
||||
move 1 from 6 to 8
|
||||
move 11 from 1 to 6
|
||||
move 1 from 1 to 5
|
||||
move 3 from 2 to 9
|
||||
move 2 from 9 to 3
|
||||
move 1 from 1 to 7
|
||||
move 2 from 4 to 9
|
||||
move 4 from 2 to 9
|
||||
move 2 from 8 to 5
|
||||
move 10 from 6 to 1
|
||||
move 2 from 5 to 6
|
||||
move 5 from 9 to 8
|
||||
move 5 from 8 to 7
|
||||
move 1 from 2 to 1
|
||||
move 7 from 1 to 2
|
||||
move 2 from 9 to 4
|
||||
move 1 from 3 to 5
|
||||
move 15 from 7 to 2
|
||||
move 8 from 6 to 3
|
||||
move 2 from 4 to 3
|
||||
move 2 from 6 to 4
|
||||
move 4 from 7 to 1
|
||||
move 4 from 7 to 5
|
||||
move 1 from 6 to 4
|
||||
move 3 from 1 to 7
|
||||
move 5 from 7 to 6
|
||||
move 4 from 7 to 5
|
||||
move 18 from 2 to 4
|
||||
move 5 from 6 to 4
|
||||
move 4 from 1 to 2
|
||||
move 8 from 3 to 8
|
||||
move 2 from 8 to 4
|
||||
move 2 from 3 to 7
|
||||
move 1 from 5 to 7
|
||||
move 3 from 8 to 4
|
||||
move 2 from 7 to 2
|
||||
move 1 from 3 to 8
|
||||
move 9 from 2 to 6
|
||||
move 2 from 8 to 6
|
||||
move 1 from 7 to 3
|
||||
move 1 from 3 to 5
|
||||
move 3 from 6 to 8
|
||||
move 1 from 8 to 5
|
||||
move 1 from 5 to 9
|
||||
move 1 from 1 to 2
|
||||
move 5 from 4 to 6
|
||||
move 10 from 6 to 2
|
||||
move 5 from 2 to 6
|
||||
move 5 from 6 to 4
|
||||
move 1 from 6 to 3
|
||||
move 6 from 4 to 6
|
||||
move 3 from 2 to 6
|
||||
move 2 from 2 to 3
|
||||
move 11 from 4 to 6
|
||||
move 1 from 9 to 5
|
||||
move 4 from 6 to 7
|
||||
move 1 from 4 to 3
|
||||
move 12 from 4 to 3
|
||||
move 1 from 8 to 6
|
||||
move 9 from 5 to 7
|
||||
move 1 from 5 to 2
|
||||
move 1 from 8 to 5
|
||||
move 1 from 4 to 9
|
||||
move 9 from 7 to 9
|
||||
move 1 from 3 to 4
|
||||
move 2 from 3 to 6
|
||||
move 2 from 5 to 6
|
||||
move 2 from 8 to 5
|
||||
move 11 from 3 to 4
|
||||
move 2 from 3 to 1
|
||||
move 1 from 2 to 3
|
||||
move 1 from 3 to 8
|
||||
move 3 from 7 to 9
|
||||
move 5 from 4 to 2
|
||||
move 2 from 5 to 8
|
||||
move 6 from 4 to 2
|
||||
move 1 from 1 to 3
|
||||
move 12 from 9 to 1
|
||||
move 6 from 1 to 6
|
||||
move 1 from 8 to 4
|
||||
move 1 from 8 to 3
|
||||
move 5 from 2 to 7
|
||||
move 2 from 3 to 9
|
||||
move 5 from 7 to 1
|
||||
move 1 from 7 to 5
|
||||
move 2 from 9 to 1
|
||||
move 14 from 1 to 7
|
||||
move 2 from 4 to 7
|
||||
move 7 from 2 to 4
|
||||
move 1 from 2 to 1
|
||||
move 1 from 1 to 3
|
||||
move 1 from 5 to 4
|
||||
move 1 from 9 to 6
|
||||
move 16 from 6 to 5
|
||||
move 2 from 5 to 4
|
||||
move 12 from 6 to 8
|
||||
move 10 from 4 to 8
|
||||
move 9 from 7 to 3
|
||||
move 4 from 7 to 6
|
||||
move 11 from 5 to 8
|
||||
move 2 from 5 to 2
|
||||
move 14 from 8 to 9
|
||||
move 1 from 5 to 1
|
||||
move 3 from 9 to 4
|
||||
move 2 from 2 to 1
|
||||
move 7 from 8 to 3
|
||||
move 6 from 3 to 5
|
||||
move 8 from 9 to 8
|
||||
move 1 from 6 to 1
|
||||
move 1 from 4 to 2
|
||||
move 4 from 3 to 8
|
||||
move 1 from 7 to 2
|
||||
move 3 from 1 to 5
|
||||
move 2 from 5 to 7
|
||||
move 3 from 9 to 2
|
||||
move 1 from 1 to 8
|
||||
move 5 from 5 to 4
|
||||
move 2 from 7 to 8
|
||||
move 4 from 2 to 5
|
||||
move 1 from 2 to 4
|
||||
move 2 from 7 to 8
|
||||
move 4 from 6 to 2
|
||||
move 6 from 5 to 3
|
||||
move 1 from 6 to 5
|
||||
move 1 from 5 to 3
|
||||
move 1 from 3 to 8
|
||||
move 8 from 8 to 3
|
||||
move 9 from 8 to 5
|
||||
move 9 from 8 to 2
|
||||
move 2 from 8 to 9
|
||||
move 2 from 3 to 8
|
||||
move 5 from 5 to 8
|
||||
move 1 from 3 to 7
|
||||
move 2 from 9 to 5
|
||||
move 7 from 2 to 4
|
||||
move 14 from 4 to 6
|
||||
move 2 from 2 to 7
|
||||
move 1 from 7 to 3
|
||||
move 1 from 7 to 9
|
||||
move 3 from 5 to 2
|
||||
move 1 from 7 to 1
|
||||
move 3 from 2 to 4
|
||||
move 7 from 8 to 2
|
||||
move 3 from 6 to 1
|
||||
move 17 from 3 to 1
|
||||
move 2 from 8 to 3
|
||||
move 6 from 2 to 7
|
||||
move 2 from 7 to 9
|
||||
move 3 from 6 to 8
|
||||
move 2 from 8 to 6
|
||||
move 4 from 2 to 1
|
||||
move 3 from 4 to 7
|
||||
move 1 from 8 to 7
|
||||
move 1 from 8 to 9
|
||||
move 1 from 4 to 2
|
||||
move 3 from 5 to 7
|
||||
move 2 from 3 to 1
|
||||
move 2 from 3 to 5
|
||||
move 5 from 7 to 4
|
||||
move 5 from 7 to 3
|
||||
move 1 from 4 to 8
|
||||
move 3 from 3 to 1
|
||||
move 6 from 1 to 3
|
||||
move 1 from 7 to 5
|
||||
move 2 from 9 to 2
|
||||
move 3 from 5 to 8
|
||||
move 1 from 8 to 1
|
||||
move 8 from 3 to 5
|
||||
move 1 from 4 to 9
|
||||
move 3 from 6 to 5
|
||||
move 3 from 6 to 3
|
||||
move 2 from 3 to 7
|
||||
move 1 from 4 to 7
|
||||
move 3 from 6 to 4
|
||||
move 2 from 7 to 2
|
||||
move 1 from 7 to 8
|
||||
move 2 from 5 to 4
|
||||
move 1 from 6 to 1
|
||||
move 7 from 4 to 7
|
||||
move 7 from 5 to 2
|
||||
move 10 from 2 to 3
|
||||
move 3 from 2 to 6
|
||||
move 3 from 8 to 1
|
||||
move 1 from 8 to 7
|
||||
move 2 from 6 to 3
|
||||
move 1 from 6 to 9
|
||||
move 4 from 7 to 5
|
||||
move 16 from 1 to 5
|
||||
move 1 from 9 to 7
|
||||
move 3 from 7 to 6
|
||||
move 11 from 5 to 6
|
||||
move 2 from 7 to 9
|
||||
move 12 from 6 to 4
|
||||
move 2 from 6 to 9
|
||||
move 6 from 3 to 2
|
||||
move 1 from 5 to 7
|
||||
move 5 from 9 to 5
|
||||
move 1 from 9 to 6
|
||||
move 4 from 3 to 7
|
||||
move 1 from 4 to 2
|
||||
move 7 from 2 to 5
|
||||
move 3 from 5 to 2
|
||||
move 6 from 5 to 6
|
||||
move 3 from 2 to 6
|
||||
move 9 from 6 to 8
|
||||
move 5 from 5 to 9
|
||||
move 5 from 7 to 1
|
||||
move 4 from 1 to 9
|
||||
move 2 from 9 to 4
|
||||
move 1 from 6 to 7
|
||||
move 9 from 4 to 1
|
||||
move 7 from 5 to 9
|
||||
move 18 from 1 to 3
|
||||
move 9 from 9 to 5
|
||||
move 8 from 8 to 2
|
||||
move 1 from 2 to 5
|
||||
move 4 from 2 to 3
|
||||
move 4 from 9 to 6
|
||||
move 1 from 4 to 8
|
||||
move 2 from 5 to 7
|
||||
move 2 from 9 to 2
|
||||
move 10 from 3 to 9
|
||||
move 5 from 5 to 9
|
||||
move 1 from 7 to 2
|
||||
move 2 from 8 to 7
|
||||
move 2 from 3 to 5
|
||||
move 2 from 9 to 1
|
||||
move 2 from 7 to 3
|
||||
move 1 from 2 to 1
|
||||
move 5 from 5 to 8
|
||||
move 1 from 2 to 1
|
||||
move 15 from 3 to 6
|
||||
move 1 from 7 to 6
|
||||
move 10 from 6 to 5
|
||||
move 1 from 7 to 8
|
||||
move 4 from 1 to 6
|
||||
move 1 from 8 to 3
|
||||
move 2 from 1 to 5
|
||||
move 3 from 8 to 1
|
||||
move 1 from 4 to 6
|
||||
move 1 from 4 to 2
|
||||
move 4 from 9 to 7
|
||||
move 6 from 5 to 7
|
||||
move 3 from 1 to 9
|
||||
move 10 from 6 to 8
|
||||
move 2 from 1 to 3
|
||||
move 8 from 7 to 9
|
||||
move 1 from 9 to 6
|
||||
move 2 from 7 to 9
|
||||
move 3 from 3 to 5
|
||||
move 1 from 2 to 6
|
||||
move 2 from 6 to 5
|
||||
move 5 from 9 to 4
|
||||
move 4 from 8 to 2
|
||||
move 1 from 1 to 3
|
||||
move 4 from 5 to 9
|
||||
move 3 from 6 to 1
|
||||
move 2 from 1 to 5
|
||||
move 3 from 5 to 2
|
||||
move 8 from 8 to 3
|
||||
move 11 from 9 to 4
|
||||
move 13 from 4 to 8
|
||||
move 2 from 9 to 2
|
||||
move 2 from 3 to 1
|
||||
move 1 from 4 to 1
|
||||
move 1 from 3 to 8
|
||||
move 2 from 6 to 9
|
||||
move 7 from 8 to 1
|
||||
move 3 from 2 to 5
|
||||
move 7 from 2 to 5
|
||||
move 3 from 4 to 6
|
||||
move 4 from 9 to 2
|
||||
move 2 from 3 to 5
|
||||
move 9 from 5 to 6
|
||||
move 5 from 2 to 7
|
||||
move 2 from 9 to 2
|
||||
move 2 from 9 to 7
|
||||
move 12 from 6 to 8
|
||||
move 5 from 5 to 7
|
||||
move 1 from 9 to 8
|
||||
move 3 from 1 to 6
|
||||
move 5 from 5 to 8
|
||||
move 6 from 1 to 9
|
||||
move 2 from 1 to 5
|
||||
move 1 from 6 to 9
|
||||
move 5 from 9 to 7
|
||||
move 2 from 5 to 8
|
||||
move 11 from 7 to 6
|
||||
move 20 from 8 to 1
|
||||
move 2 from 9 to 8
|
||||
move 4 from 7 to 6
|
||||
move 6 from 8 to 3
|
||||
move 13 from 6 to 9
|
||||
move 4 from 3 to 2
|
||||
move 4 from 6 to 3
|
||||
move 2 from 3 to 6
|
||||
move 5 from 9 to 8
|
||||
move 2 from 7 to 1
|
||||
move 2 from 6 to 9
|
||||
move 6 from 8 to 3
|
||||
move 6 from 3 to 6
|
||||
move 5 from 2 to 9
|
||||
move 22 from 1 to 3
|
||||
move 3 from 2 to 1
|
||||
move 5 from 9 to 3
|
||||
move 1 from 1 to 6
|
||||
move 3 from 6 to 2
|
||||
move 1 from 2 to 4
|
||||
move 33 from 3 to 5
|
||||
move 1 from 8 to 7
|
9
input/05-test
Normal file
9
input/05-test
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
|
92
src/bin/05.rs
Normal file
92
src/bin/05.rs
Normal file
|
@ -0,0 +1,92 @@
|
|||
use std::collections::VecDeque;
|
||||
|
||||
use aoc2022::*;
|
||||
use itertools::Itertools;
|
||||
use regex::Regex;
|
||||
|
||||
const INPUT: &str = include_str!("../../input/05");
|
||||
|
||||
fn main() {
|
||||
let mut game = input();
|
||||
game.apply_actions9000();
|
||||
solved_level_1(game.top_letters());
|
||||
|
||||
let mut game = input();
|
||||
game.apply_actions9001();
|
||||
solved_level_2(game.top_letters());
|
||||
}
|
||||
|
||||
struct Game {
|
||||
stacks: Vec<VecDeque<char>>,
|
||||
actions: Vec<Action>,
|
||||
}
|
||||
|
||||
impl Game {
|
||||
fn top_letters(&self) -> String {
|
||||
self.stacks
|
||||
.iter()
|
||||
.map(|s| s.iter().last().unwrap())
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn apply_actions9000(&mut self) {
|
||||
for a in &self.actions {
|
||||
for _ in 0..a.count {
|
||||
let item = self.stacks[a.from].pop_back().unwrap();
|
||||
self.stacks[a.to].push_back(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn apply_actions9001(&mut self) {
|
||||
for a in &self.actions {
|
||||
let drain_start = self.stacks[a.from].len() - a.count;
|
||||
let items = self.stacks[a.from].drain(drain_start..).collect_vec();
|
||||
self.stacks[a.to].extend(items.iter());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct Action {
|
||||
from: usize,
|
||||
to: usize,
|
||||
count: usize,
|
||||
}
|
||||
|
||||
fn input() -> Game {
|
||||
let mut stacks = Vec::new();
|
||||
let mut actions = Vec::new();
|
||||
let action_pattern = Regex::new(r"move (\d+) from (\d+) to (\d+)").unwrap();
|
||||
|
||||
for line in INPUT.lines() {
|
||||
if line.contains('[') {
|
||||
for (i, mut letter) in line.chars().chunks(4).into_iter().enumerate() {
|
||||
let letter = letter.nth(1).unwrap();
|
||||
|
||||
if i >= stacks.len() {
|
||||
stacks.push(VecDeque::new());
|
||||
}
|
||||
|
||||
if letter.is_whitespace() {
|
||||
continue;
|
||||
}
|
||||
|
||||
stacks[i].push_front(letter);
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(cap) = action_pattern.captures(line) {
|
||||
let count = cap.get(1).unwrap().as_str().parse().unwrap();
|
||||
let from: usize = cap.get(2).unwrap().as_str().parse().unwrap();
|
||||
let to: usize = cap.get(3).unwrap().as_str().parse().unwrap();
|
||||
|
||||
actions.push(Action {
|
||||
count,
|
||||
to: to - 1,
|
||||
from: from - 1,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Game { stacks, actions }
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue