diff --git a/2022/day-01/Cargo.lock b/2022/Cargo.lock similarity index 74% rename from 2022/day-01/Cargo.lock rename to 2022/Cargo.lock index be60fb4..3cbff41 100644 --- a/2022/day-01/Cargo.lock +++ b/2022/Cargo.lock @@ -5,3 +5,7 @@ version = 3 [[package]] name = "aoc-2022-01" version = "0.1.0" + +[[package]] +name = "aoc-2022-02" +version = "0.1.0" diff --git a/2022/Cargo.toml b/2022/Cargo.toml new file mode 100644 index 0000000..6b080f2 --- /dev/null +++ b/2022/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] +members = ["./day-01", "./day-02"] + + +[workspace.package] +edition = "2021" +rust-version = "1.65" +authors = ["Patrick Auernig"] diff --git a/2022/README.md b/2022/README.md index e83420d..a64e9dd 100644 --- a/2022/README.md +++ b/2022/README.md @@ -5,7 +5,7 @@ | Day | Part 1 | Part 2 | Language | | :-: | :----: | :----: | :------- | | 01 | ✓ | ✓ | [Rust] | -| 02 | | | | +| 02 | ✓ | ✓ | [Rust] | | 03 | | | | | 04 | | | | | 05 | | | | diff --git a/2022/day-02/Cargo.toml b/2022/day-02/Cargo.toml new file mode 100644 index 0000000..6ec49cb --- /dev/null +++ b/2022/day-02/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc-2022-02" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/2022/day-02/Justfile b/2022/day-02/Justfile new file mode 100644 index 0000000..7d08527 --- /dev/null +++ b/2022/day-02/Justfile @@ -0,0 +1,5 @@ +@part PART INPUT_FILE="inputs/puzzle.txt": + cargo --quiet run --bin part_{{PART}} -- {{INPUT_FILE}} + +clean: + cargo clean diff --git a/2022/day-02/inputs/puzzle.txt b/2022/day-02/inputs/puzzle.txt new file mode 100644 index 0000000..5f93934 --- /dev/null +++ b/2022/day-02/inputs/puzzle.txt @@ -0,0 +1,2500 @@ +B Z +C Z +C Z +A Y +B Z +C Y +C Z +C Y +C X +A Z +B Z +C Z +A Y +C Z +B X +C Y +C Z +C X +C X +C Y +C Y +C X +A Y +C Y +C Y +C X +C Z +C X +A X +C Z +C Y +C Z +C Z +C Z +A Z +C Z +B Z +A Y +A X +A Y +C Z +A Y +C Z +A Z +C Y +C Y +C Y +A X +C X +C X +C Y +A X +A Y +C X +A X +C Z +A Y +C Z +C Y +A Y +C Z +A X +A Y +A X +C X +C Z +A X +B Z +C Z +C Y +C X +C X +C Z +C X +C Z +A X +C Y +A Y +C Y +C Z +C X +B X +B Z +C Z +C X +A X +B Z +A Y +A Y +B Z +A Y +C Y +B Z +B X +C X +C X +C X +A X +A Z +A Y +A Y +C Y +C Z +C Z +C Z +A Y +C X +A Y +A X +C X +C X +A X +A Y +A X +A X +A Y +C Y +A Y +A Y +A X +C X +B Z +A X +C Y +C X +C Z +C Z +C Z +C Z +C Y +C X +C X +A X +A Y +A X +C Z +C X +C Y +C Y +C Z +C Z +B Z +C Z +C Y +C X +C Y +A X +A Y +C X +B Z +B Y +C Z +C Y +C X +A Y +C Y +B Z +A Z +C X +C Z +C Y +C X +C Z +A X +A Y +C Y +C Y +A Y +A X +A X +C X +C X +C Z +A Y +A Y +C Y +C Z +A X +A Y +C X +C X +C Y +C X +C Z +C X +C Z +C Z +C Z +C Z +A Y +B Z +C Y +C Z +A Z +C X +C X +A X +A Z +C Z +C X +C Z +A X +B Z +B Z +A X +C X +C X +B Z +B Z +B Z +C Z +C X +A Y +C Z +A X +C Y +C Z +C Z +C X +C X +C Z +C Y +C Y +C X +C X +A X +C Y +A X +C Y +C X +B X +B Z +C X +C X +B X +C Z +C Y +A X +C Z +C Z +C Z +C Y +C X +A Y +A Z +C Z +B Z +C Z +C X +A Y +C X +C X +A X +C X +C Z +A X +C Z +C Y +C Y +C Y +C Z +A X +C Y +C X +C Z +A X +C Z +C X +C X +C X +A Y +C Z +A Y +C Z +C Y +C Z +A Y +C X +C X +C X +C Y +C Z +C X +C Y +C X +A X +C X +C Y +C X +C Z +C X +B Z +C X +B Z +B X +C X +C X +C X +B X +A Y +A Y +A X +B Z +C X +A Z +C Y +C X +C X +C Y +A Y +A Z +C X +A Y +C Z +C X +C X +C Y +C Y +A Z +A X +C Z +C X +C Z +B Y +A Y +C Z +A Y +C Z +A X +C Y +C Y +C X +A Y +C X +C X +B X +C Z +C X +C Y +C Z +C Z +C Y +C Y +C Y +C X +B Z +C X +C X +C Y +C Y +C Z +B Z +C X +C Y +B Z +C Z +A Y +C X +C X +A Y +C Y +C Z +C X +A Y +A Y +C Z +C Z +C Z +A X +C X +C Z +C Z +C Z +A Y +A X +C X +C Z +C X +C X +C Y +A Y +C X +C Y +C Z +C Y +A X +C X +C X +C Z +A X +B X +C Y +A X +C Y +C Y +C X +C Z +B X +C X +C Z +A Y +C Z +C X +A X +C Y +A X +C Z +A X +C X +C Y +C X +C Z +C X +C X +C Y +A X +C Y +A Y +C Z +C X +C X +A X +A Z +C X +C X +C Y +B Z +A X +A X +C X +B Z +C Z +A Y +C Y +C Z +C X +A Z +C Y +A X +C Y +C Z +C Z +C X +C Y +C X +C Y +C Y +C X +A Y +B X +C X +A X +A Y +C Y +C Z +C Y +C X +A Y +C Z +C X +C X +A Z +C Y +C Z +A X +C X +C Z +A Y +A X +B X +C Z +B Z +C X +A Z +C Z +A X +A Y +C X +A X +B Z +C X +C Y +C Z +C Y +C Y +C Z +C X +B X +C Y +B Y +C Z +A Y +A Y +C Y +C Z +A X +C Z +C Y +B Z +C X +A X +C X +C X +C Y +C Y +C Z +A Y +C Z +A X +A Y +C X +C Y +C Z +C X +A X +B Z +C Z +A X +C X +C X +C X +B Z +C Z +C Y +B Z +A X +C Z +C Y +A X +C X +B Z +C Y +C X +C Z +C Z +C Z +C X +C Y +B X +A X +B Z +C X +C Y +C Z +C X +C Z +C Z +C Z +C Y +A X +C X +C Z +A X +C X +C Z +B X +C Z +B Z +A Y +A X +C Z +C Z +C Y +C Z +C Y +C Z +A Y +B Z +A Y +C X +A X +A X +A X +B Z +C Z +B Y +C Y +A Y +A Y +C Z +A Y +C Z +C Z +A Y +C Z +C Z +C Z +A Y +C Z +C Z +C Z +C Z +A Y +C Y +A Y +C Y +C X +C X +C Z +C X +C Z +C Y +A X +C Z +B X +C Z +A X +C Z +C Z +C Y +C Z +C Y +C X +C Y +B X +C Z +C X +C Y +A Y +C X +C Z +C X +C Z +C X +A Z +C Z +C X +C X +B Z +C Z +C X +A X +C Y +A Y +C X +C Z +C Z +A Y +A X +B Y +C Y +C Y +C Y +C X +A X +C Z +C Y +C Z +C X +C Z +C Z +C Y +B X +C X +C Z +C X +C X +C Y +A X +B Z +A X +C X +C Z +B Z +A Y +C Y +B Z +C X +A Z +A X +C Z +C Z +C X +A Y +B Y +C X +C Z +B Y +A Y +A Y +C X +A X +C Y +C X +C X +C Z +A X +A X +A X +B Z +C Y +C Z +C X +A X +B Z +C Z +C Z +C X +C X +C X +C X +C Z +C Y +C Z +C Z +C Z +A Y +C Z +C X +C Y +C X +B Y +A Y +C Z +C X +C Z +A X +A X +C Y +C Y +C X +C Z +C Z +C Z +C X +C Z +C X +C Y +C X +C X +C Y +C Y +B Z +C Z +C Z +B Z +C Y +C Z +C Y +B Z +C X +C Z +C Y +C Z +A Y +C Z +B Z +C Z +C X +C X +A Z +C Z +C X +A Y +A Z +A X +C Y +C X +C Z +C X +C X +C Y +C X +C Z +C X +C Y +C Y +C Z +C Y +C Y +C Y +A Z +A Y +C Z +C Y +C Z +C X +A X +C Z +C Z +A Y +C Z +C X +C X +C X +C Z +C X +C Z +C Y +A Z +C Z +C Y +C Z +C X +C Y +C Y +C X +C X +C Z +A Y +C Y +B Z +A Y +C Y +C X +C Z +C X +C Y +C Z +A Y +A X +C Z +B Y +C Y +A X +C Y +C Z +B Z +C Y +C Z +C Z +B Z +C X +A Y +C Z +C X +B Y +B Z +C Z +B Z +C X +A X +A X +B Z +C Z +C Z +C Z +C Y +A Y +C Z +B X +C Y +A Z +C Y +C Y +A Y +C X +C Y +B Z +C X +C X +C X +B Z +C X +B Z +A X +C Y +C Y +A X +C X +A Y +C X +A X +C Z +A X +C X +C X +A Y +C Z +C Z +C X +C X +B Z +A Y +C Y +C X +A Y +C Z +A X +C X +B Z +C X +C X +B X +B X +B Z +C Z +C X +A Y +B Z +B Y +C X +C Z +A Y +C Z +C X +C X +B Z +C X +A Y +A X +A Z +C Z +C Y +B Z +C X +A X +C X +A X +C X +C X +C Z +A X +B Z +C Z +C X +C X +A X +C Z +C X +C X +C Z +C Y +C X +A X +C X +C X +C X +A X +C Z +C Z +C Y +B Z +C X +A Y +C Z +C X +C Y +B X +A X +C X +B Z +C Y +B X +A Y +B X +C Z +C Y +C X +C Z +A Y +A Y +C X +A X +C X +C X +A Y +A X +B X +C Y +A Y +C X +C Z +A Y +C Z +B Z +C Z +A X +C Y +C Y +C Y +A Y +A Z +A Y +C X +C X +A Y +C Y +A X +C Y +A Y +C X +C Y +B Z +C Z +C Z +B X +C Y +B X +A Y +A Y +A X +A Y +C Z +C Z +C Y +B Z +A Z +C X +C Z +A X +C X +C X +C Z +C Y +C X +A Y +C Z +B Z +A Y +A X +C Y +B X +C Z +A Y +C X +C Y +C X +A X +C Z +C Z +C X +C Z +A X +C X +C X +A Z +B Z +A X +C Y +C X +A X +C X +C Z +C Y +A Y +C X +A Y +A X +C Y +A Y +C X +A Y +C X +B Z +C X +C X +C X +C Z +C Z +C Z +B Z +C X +B Z +C X +A X +A Y +A Y +A X +C Y +A X +C Y +A Y +B Z +C X +C X +C Y +C X +C Z +A X +A Y +C Z +A X +C X +C X +B X +C X +A Y +C X +C Z +B Z +A X +B Z +C Y +C Z +C Y +C Y +C X +C Z +C Z +C Z +A X +C X +A X +A Y +A X +C Z +C Z +A Z +C Y +B Z +A X +C Z +C Z +C X +C X +A X +A Z +C Z +C X +C X +C Y +C Y +C Y +A Y +A Y +C Z +A X +C Z +C X +A X +C Y +C Z +C Y +A X +A Y +A X +C Z +B Z +C Z +A X +C X +C Y +C X +C X +C Y +C Z +C Z +C Y +C X +A Y +C Y +C Z +B Z +C Y +C Y +A X +C Z +B Z +C X +B Z +B Z +C Z +C X +C Z +A X +C Z +C X +A Y +A X +A Y +C Z +C Z +C Z +C Z +C X +B Z +C Y +C X +B Z +C X +A X +A Y +C X +A Z +A Y +A X +C Y +C Z +C Y +C Z +B Z +C Y +C X +A Y +B Z +C Z +C Z +C Y +C X +C Z +A Y +C Y +A Y +C Z +B Z +C Z +A X +C Z +C Z +C Y +C X +C Y +A X +C Y +C Z +C X +A X +B Z +C Y +C X +C Z +C Y +A X +C X +A Y +A Y +C X +C Z +C Y +B Z +B X +C Y +C X +C X +C Z +C Y +C X +C Z +C Y +A X +B Y +A X +A Y +C X +A X +A X +A X +C Y +B X +B Z +C Z +C X +C Z +A Y +C Y +C X +B Z +A X +C X +A Y +C X +C X +C X +B Z +C Z +C X +B X +C Z +C Y +C X +C Y +C Z +C Z +C Z +A X +C X +C X +C X +B Z +C Z +A Y +C X +B Z +B Z +A Y +A Y +B Z +C X +C Y +A X +C Y +C X +C Y +C Y +C X +B Z +C Z +C Z +C Z +C Y +A Y +C Z +C Y +A X +C X +C Z +C Y +A Y +C Z +C X +B Z +C X +C Z +C Z +C Y +A X +A Y +C Z +A Y +C Z +C X +C Z +C Z +A X +A X +C X +B Z +B Z +C Y +A Y +C X +C X +C Z +C Z +A Y +C Y +C Z +A X +C X +C Y +A Y +C X +C X +A Z +C X +C Y +C Z +C X +B Z +C X +A X +C Z +C Z +A X +C Z +C Y +C Z +C Z +A Y +C X +C X +C X +C Y +C Z +C X +C X +C Y +B Z +A X +C X +A Y +B Z +A Y +A X +A X +B X +C Y +A Y +C Y +C Z +A X +C X +A Y +A Y +C Z +C X +C Z +C Z +C Z +C Z +A Y +A Y +A X +C X +A Y +C Y +A X +C X +C X +C X +B Z +C Z +B Z +A X +C Z +C Z +C Y +C X +C X +C X +C Y +A Z +B X +B Z +C X +B Z +A X +A Y +C Z +B Y +C X +C X +A Y +C Y +C Y +C Z +C X +A X +B Z +C X +A X +A X +C X +A X +C Y +B X +C Z +C Z +C Z +C Z +C X +C Z +C X +C Z +C Z +A X +C Z +C X +B Z +A Y +C Z +B Z +C Y +C X +C X +C Z +C Y +C X +C Z +C X +B X +C Z +A Y +C X +B Z +A Y +A X +C X +C X +B Z +C Y +C Z +C X +C Z +C Z +C Z +B X +C X +C X +C Y +B Z +A Y +C Y +C Z +A Z +A Y +C Z +C Y +C Y +A X +B Z +B Z +C X +A X +C Z +B Z +C Z +C Y +C Z +C Y +A X +C X +C Y +C X +B X +C Y +A Y +C X +C Z +A Z +C Y +A X +C Z +C Y +B Z +C Y +C Z +A Y +C Z +C X +A Y +C X +C Z +C X +B Z +C X +A X +C Z +C Z +C X +C Z +C X +C Z +C Z +A Z +A X +B Z +B X +C Z +C X +B Z +C X +C Y +C Z +C Z +A X +A X +C Y +B Z +A X +C X +C Z +A Z +A Z +C Z +C Y +C X +C Y +C Z +A Z +A X +A Y +C X +C Z +A Y +C Y +A Y +A X +C Z +C X +C Z +C X +B Z +A Y +C X +A X +C X +B X +C X +A X +C X +A X +C Y +A Y +C X +A Y +C X +C Z +C X +B Z +A X +C Z +A X +C Z +C Z +C Y +C Z +C Y +C X +A Y +C X +A X +C Z +C X +A Y +C Y +C X +C X +C Z +C X +C Y +C X +C X +C X +C X +A Y +A Y +A Y +C Z +C X +B Y +B Y +A Y +C Z +C X +A Y +C Z +C Y +C X +C Z +A X +C Z +C Z +C Y +A X +A X +C Z +C X +C X +C X +C Z +C Z +A Y +C Y +A X +B Z +C Z +C Y +C Z +A X +C Z +C X +C X +A Y +C Z +C X +C Z +C Z +A Y +C Y +C Z +A X +C Y +C Z +A X +C X +A X +C X +C Z +C X +C Z +C Z +C Y +C Y +A Y +C Y +A X +C Y +C X +C Z +C X +A X +C X +A X +A Y +A X +C Z +A X +C Y +C X +A Y +C Z +C Z +C X +B X +C Z +C Y +A Y +B Z +C Y +C X +B Z +C X +A Y +A X +A X +A X +C X +A X +C X +C Z +C X +A X +C Y +A Y +C X +C Z +C X +C Z +C Y +C X +A X +C X +C Y +A Y +A X +B Z +C Y +B Z +C Y +C X +A Y +C X +C Z +C X +C Y +A X +C Y +C Y +C Z +C Y +C X +C Z +C X +C X +C X +C Z +C X +A Y +A Y +C X +C Z +B Z +C X +C Y +C X +C X +C Z +C Z +C X +C X +A Z +A X +C X +B Z +C Z +C Y +C Z +C X +C X +C X +C Z +C X +A X +A X +C Z +C X +A Z +C X +A X +A X +C Z +A X +A Y +C Z +A Z +A Y +C Y +C X +A Y +A X +C Z +C X +A Y +B Z +C Z +A X +C Z +C X +A X +A Y +C Z +C Y +C Z +C Z +B Z +C X +C Z +C Z +C Y +C X +C Z +C X +C X +B Z +B Z +A Y +B X +B Z +C Z +A Z +C Y +C X +C Z +C X +C X +A X +C X +A Y +B X +C Z +C Y +C X +C Z +C Y +C Y +C X +B Z +C X +B Z +C Y +C Y +C Y +C X +C X +A X +A X +A X +C Z +A X +C Z +C X +C Y +C Z +C Y +A Y +C Y +A X +A Y +C Y +C Z +C Z +A Y +C X +C X +A X +C Y +C X +C Y +A X +C X +C Y +C Z +C Z +B Z +A Y +C X +B Z +C Y +A X +C Z +C X +C Z +B X +C Z +C Z +C Z +C X +C Z +C Z +C X +C Z +C Z +B X +A X +C Y +C Z +A Y +C Y +C Z +C Z +C X +A Y +A X +C Y +C Y +A Y +C Z +C X +C X +C X +A Y +C X +B X +C Z +C Z +C X +C Z +C X +A Y +A Z +C Z +C Z +B X +C Y +A Z +A Y +C Z +C X +C Z +C X +A X +A Y +C Y +A X +C Z +C X +C Z +B X +C X +C Z +B Z +C Z +C Y +C Y +A X +C Z +C X +C Y +C Z +C Z +A Y +C Z +C Y +C Y +A X +B Z +C Z +A X +C Y +C Y +C Z +A X +C X +C Z +C X +C X +C Z +C Y +C X +C Z +B Z +C Y +A X +A X +C X +C Z +A X +C X +B Z +C Y +C Z +C Y +C X +C Z +B Y +C X +C Z +A X +C X +A X +C X +C Z +B Z +C Z +C Z +A Z +C Y +C X +A X +C Z +A X +A Y +C X +C Z +C Y +A Y +C Y +C X +A X +C X +C Y +C X +C X +C Z +C Z +C X +C Z +A X +A X +C X +C Z +B Z +A X +C X +C Z +C Y +C X +B Z +C X +C X +C X +B X +C Y +A Y +C Z +A Z +A Y +A Y +C Y +B Z +C Z +C Y +C X +C Z +C X +B Z +B X +A X +A Z +A Y +C Z +C Y +C Y +C X +B Y +C Y +C X +C X +B X +C Y +C Z +B Z +C X +C Y +A Y +C Z +C X +C Z +A X +C Z +A X +A Y +C Y +A Y +C Y +C Z +A X +C Y +C Y +C X +B X +C Z +C X +C Z +C Z +C Z +C X +C Z +C Y +C X +C Y +C X +C X +C X +C X +A Y +C X +A Y +C X +C Z +A X +A Z +C Z +C X +C X +C X +C X +B Z +C Z +C Z +C Y +C X +C Z +C X +B Z +B Z +C Z +C Z +C X +C X +C Z +B Z +C X +A Y +C X +C Z +C X +C Y +C Z +C Z +C X +C Z +A Y +A Y +C X +C Z +C Z +C X +C X +B Z +C X +C Z +C Z +C X +C Z +A X +C Z +B Z +C Z +A Y +C Z +C X +C X +B Z +A Y +C Z +A Y +C Y +A Z +C X +A X +C X +A Y +C Z +C X +C Z +C Z +C X +C Z +A X +B Z +C Y +C Z +C Z +C X +C Z +B Z +C Y +C Z +C Z +A X +B Z +A X +B Z +C X +C Z +A Z +A Z +C X +A X +A X +B Z +A Y +A Y +A Z +C X +C Z +C Z +C X +C X +C X +A X +C X +C Z +C Y +C Z +C X +C Z +C X +A X +A Y +C X +A X +C X +B Z +B Z +B X +C X +A X +B X +C X +A Y +C Z +C Y +C Z +C X +A X +A Y +C Z +B Z +C X +B Z +C Z +B Z +A X +A X +C Y +B Z +C X +B Z +A Y +C Z +A Y +C Z +C X +A Z +C Z +C Z +B Z +A Y +B Z +C Y +C X +A Y +A X +A X +C X +C Y +B Z +C X +C Z +C Z +A X +A Y +C X +C Y +B Z +C Z +C X +A X +C Z +C X +C X +B Z +C Y +A Y +A X +C Z +B Z +C X +C Z +A Y +C X +B Z +C Y +B X +C X +C X +C Y +A Y +A X +C Y +C Y +C Z +C Y +C Y +C X +B X +C X +A Y +C Z +C Z +A Y +C Z +C Z +C Z +C Z +C Z +C Y +A Y +C Z +A X +C Y +C Z +C X +C Z +C X +A Z +C X +A Y +B Y +B Z +A Y +A Y +C Z +C X +B Z +B X +B Y +C X +C Z +B Z +A X +C X +C X +C Y +A X +C Z +C Y +A Y +A X +A X +B X +A Y +C Y +C Z +C Z +C X +C X +A X +C Z +A Z +A Y +A X +C X +A Y +B Z +C X +C Z +C Y +C Z +C Z +C X +C Z +A X +A Y +C X +C X +C X +C Z +C Y +C Z +B Z +C Z +B Z +A Y +A X +C Z +C X +C Z +C X +A X +C Z +C Z +C X +C X +C Z +A Y +A Z +A Y +C Z +C Z +C X +C Y +C X +C Y +A X +C X +A Y +B Z +B Z +C X +C X +C Z +C X +A Y +A Z +A Y +C X +C Z +A Y +C Y +C Z +B Z +A X +C X +C Z +C Z +A Y +A Y +A Y +A Y +C X +B Z +A Z +B X +A X +B X +C Z +C Z +C Z +B Z +A Y +C Z +C Y +C X +C Y +A Y +C X +C Y +C Y +A X +C Y +C X +C X +C X +C X +A Y +A Y +C X +C Z +C Z +A Y +C Z +A Y +C Z +C Z +C X +C X +C Z +C Y +C Z +A X +A X +C Y +B Z +A X +B Z +B Z +C X +C Z +C Y +A X +C Z +C Y +C Z +C Y +A Y +B X +C Y +C Y +C X +C X +C Z +C Z +C X +A Y +C Z +B Z +C Y +C X +C Y +C Z +C X +A X +A Y +C Z +B Z +C X +C Z +C X +C Z +C X +A X +C Z +A X +B Z +C X \ No newline at end of file diff --git a/2022/day-02/inputs/test.txt b/2022/day-02/inputs/test.txt new file mode 100644 index 0000000..25097e8 --- /dev/null +++ b/2022/day-02/inputs/test.txt @@ -0,0 +1,3 @@ +A Y +B X +C Z \ No newline at end of file diff --git a/2022/day-02/src/bin/part_one.rs b/2022/day-02/src/bin/part_one.rs new file mode 100644 index 0000000..2ce55c8 --- /dev/null +++ b/2022/day-02/src/bin/part_one.rs @@ -0,0 +1,19 @@ +use std::{env, io}; + +use aoc_2022_02::{calculate_round_score, parse_lines, Player}; + +fn main() -> io::Result<()> { + let infile_path = env::args().nth(1).expect("input file"); + + let rounds = parse_lines(infile_path)?.map(|(a, b)| (Player::parse(&a), Player::parse(&b))); + + let mut total_score = 0u64; + + for (enemy, myself) in rounds { + total_score += calculate_round_score(&myself, &enemy); + } + + println!("{total_score}"); + + Ok(()) +} diff --git a/2022/day-02/src/bin/part_two.rs b/2022/day-02/src/bin/part_two.rs new file mode 100644 index 0000000..917c395 --- /dev/null +++ b/2022/day-02/src/bin/part_two.rs @@ -0,0 +1,20 @@ +use std::{env, io}; + +use aoc_2022_02::{calculate_round_score, parse_lines, Player, RoundResult}; + +fn main() -> io::Result<()> { + let infile_path = env::args().nth(1).expect("input file"); + let rounds = + parse_lines(infile_path)?.map(|(a, b)| (Player::parse(&a), RoundResult::parse(&b))); + + let mut total_score = 0u64; + + for (enemy, expected_result) in rounds { + let myself = enemy.versus(&expected_result); + total_score += calculate_round_score(&myself, &enemy); + } + + println!("{total_score}"); + + Ok(()) +} diff --git a/2022/day-02/src/lib.rs b/2022/day-02/src/lib.rs new file mode 100644 index 0000000..161c73f --- /dev/null +++ b/2022/day-02/src/lib.rs @@ -0,0 +1,101 @@ +use std::{ + fs::File, + io::{self, BufRead, BufReader}, + path::Path, +}; + +#[derive(Debug, Clone, Copy)] +pub enum Player { + Rock, + Paper, + Scissors, +} + +impl Player { + pub fn shape_score(&self) -> u64 { + match self { + Self::Rock => 1, + Self::Paper => 2, + Self::Scissors => 3, + } + } + + pub fn wins_against(&self, other: &Self) -> RoundResult { + match (self, other) { + (Self::Rock, Self::Paper) => RoundResult::Loss, + (Self::Rock, Self::Scissors) => RoundResult::Win, + (Self::Paper, Self::Rock) => RoundResult::Win, + (Self::Paper, Self::Scissors) => RoundResult::Loss, + (Self::Scissors, Self::Rock) => RoundResult::Loss, + (Self::Scissors, Self::Paper) => RoundResult::Win, + _ => RoundResult::Draw, + } + } + + pub fn versus(&self, expected_result: &RoundResult) -> Self { + use Player::*; + use RoundResult::*; + + match (expected_result, self) { + (Win, Rock) => Paper, + (Win, Paper) => Scissors, + (Win, Scissors) => Rock, + (Loss, Rock) => Scissors, + (Loss, Paper) => Rock, + (Loss, Scissors) => Paper, + (Draw, other) => *other, + } + } + + pub fn parse(val: &str) -> Self { + match val { + "A" | "X" => Self::Rock, + "B" | "Y" => Self::Paper, + "C" | "Z" => Self::Scissors, + _ => panic!("Invalid input"), + } + } +} + +#[derive(Debug)] +pub enum RoundResult { + Win, + Draw, + Loss, +} + +impl RoundResult { + pub fn parse(val: &str) -> Self { + match val { + "X" => Self::Loss, + "Y" => Self::Draw, + "Z" => Self::Win, + _ => panic!("Invalid input"), + } + } +} + +pub fn calculate_round_score(player1: &Player, player2: &Player) -> u64 { + player1.shape_score() + + match player1.wins_against(&player2) { + RoundResult::Win => 6, + RoundResult::Draw => 3, + RoundResult::Loss => 0, + } +} + +pub fn parse_lines

(path: P) -> io::Result> +where + P: AsRef, +{ + let file = File::open(path)?; + let reader = BufReader::new(file); + + let rounds = reader.lines().map(|line| { + let line = line.unwrap(); + let pair: Vec<_> = line.split_whitespace().collect(); + (pair[0].into(), pair[1].into()) + }); + + Ok(rounds) +} diff --git a/README.md b/README.md index 2c7a571..514c6bf 100644 --- a/README.md +++ b/README.md @@ -9,4 +9,4 @@ - [2019](2019/README.md) (0% completed) - [2020](2020/README.md) (20% completed) - [2021](2021/README.md) (68% completed) -- [2022](2022/README.md) (4% completed) +- [2022](2022/README.md) (8% completed)