diff options
author | Gard Spreemann <gspr@nonempty.org> | 2022-12-02 20:45:22 +0100 |
---|---|---|
committer | Gard Spreemann <gspr@nonempty.org> | 2022-12-02 20:45:22 +0100 |
commit | 281d7c773ed6483670e6643479f78b507f69dabd (patch) | |
tree | 456c7a7da539a1b33716baee49a9cbbbb71e63c6 | |
parent | 73e4bce8e7a5312c5b4d4559cb1707622771f4f2 (diff) |
Day 2
-rw-r--r-- | 02/Cargo.toml | 15 | ||||
-rw-r--r-- | 02/input.txt | 2500 | ||||
-rw-r--r-- | 02/src/part-1.rs | 67 | ||||
-rw-r--r-- | 02/src/part-2.rs | 74 | ||||
-rw-r--r-- | 02/test.txt | 3 |
5 files changed, 2659 insertions, 0 deletions
diff --git a/02/Cargo.toml b/02/Cargo.toml new file mode 100644 index 0000000..0307602 --- /dev/null +++ b/02/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "day-02" +version = "0.1.0" +authors = ["Gard Spreemann <gspr@nonempty.org>"] +edition = "2021" + +[[bin]] +name = "part-1" +path = "src/part-1.rs" + +[[bin]] +name = "part-2" +path = "src/part-2.rs" + +[dependencies] diff --git a/02/input.txt b/02/input.txt new file mode 100644 index 0000000..6ec569e --- /dev/null +++ b/02/input.txt @@ -0,0 +1,2500 @@ +B Z +A Z +B Z +C Z +C Z +B X +A X +C X +A Z +C Y +C X +C Y +C Y +A X +A Z +A Z +A X +B Z +B X +A Z +A X +C Y +A X +B Z +B Z +A X +C Z +A Z +A X +B Z +A Z +A Y +C Y +A Z +C Z +A Z +C Y +C Z +C Z +A Z +A X +A X +B X +A Z +B Z +A X +A Z +A Z +A X +A X +C Y +A Z +B X +C Y +A X +B Y +A Z +A X +A Z +A X +C Z +A Z +A Y +A X +C Y +A X +B X +A X +A Z +C Y +A Z +A X +C X +C Z +C Z +A Z +A X +A Z +C X +C Z +B Z +A Z +C Y +C Z +B X +A X +A Z +A X +A X +C Y +A Z +C Z +B X +A X +A X +A Z +A Y +A X +C X +A Z +B X +C Y +A X +A X +A X +C X +B Z +B Z +A Z +A X +A Z +C Z +C X +C Y +B X +C Z +A Z +C X +A Z +A X +A X +A X +A X +A Z +B X +A X +B X +C Z +A Z +A Z +A X +A X +A X +B X +A Z +A X +A Z +A X +B Z +A Z +A X +B Z +A Z +A Z +C Y +B Z +A Z +B Z +A Z +A X +C X +A X +C Y +C X +A X +A X +C Y +A Z +A X +B Z +A Z +A Z +B X +B Z +A X +A Z +A X +A X +A Z +A X +A Z +A Z +C X +A Z +A X +C Y +A Z +A Z +A X +A X +A X +A X +B Z +B X +A Z +A X +A Z +C Y +B Y +C Y +B X +A Z +A Z +A Z +C Y +A Z +A X +B Z +C X +A X +C Z +C X +C Y +A Z +A X +A Z +C Z +A Z +A Z +A Y +C Z +A X +A X +B Z +A Z +C Z +A Z +A X +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +A X +A X +A X +B Y +B X +A X +A Z +A Z +A X +A Z +A X +A X +A Z +B X +A Z +C Z +A Z +C Z +A Z +A Z +C Z +A X +C Z +A X +C X +A Z +A Z +B Z +A Y +B Z +A X +B Z +A Z +A X +A Z +A Z +A X +A Z +B Z +C X +A Z +A X +B Z +C Y +B Z +C X +A Z +A Z +C X +B X +C Z +A Z +A X +A Z +C X +A Z +C Z +C Z +B Z +B Z +A Z +C X +A X +B Y +A Y +A Z +C X +B X +A Z +A Z +B Y +A Z +A Z +C Z +A Z +A X +A Z +B X +C Z +B X +A Z +B Z +C Y +A X +A X +A Z +A Z +A Z +C Y +A X +A Z +A Z +A X +B Z +A Z +C X +C Z +A Z +A X +B Z +A X +C Y +A X +A Z +A Y +C Z +A Y +A Z +C X +C Y +A Z +C Y +A Z +A X +C Y +A Z +A X +A X +B Z +A X +C X +A X +C X +A X +A Z +A X +A Z +A Z +A X +C X +C Z +A Z +C Z +C X +A Z +C Y +A X +A Z +A Z +C Y +A X +B X +C Y +B Z +C Y +A X +A X +C Z +A X +A Z +A X +A X +C X +A X +A Z +B X +C Z +A Y +B Y +A Z +A Z +A Z +A Z +B Y +A Y +A Z +B Z +A Z +A X +C Z +B Y +C Y +A X +A Z +C Z +B Z +A Z +A Z +A Y +C Z +A Z +A Z +C Z +C Z +C Z +A X +B Y +C X +A X +A Z +A Z +B Z +A Y +A X +A Z +B X +A X +A X +A Z +A Y +A Z +A X +B X +A Z +C X +A Z +A X +C X +B X +B Y +B X +A Z +A Z +A Z +A X +B X +A X +B Z +A Y +B Z +C Z +A X +C Z +C X +A Z +C Y +C Y +A Z +A X +A X +A X +B X +A Z +A Y +C Y +B X +A X +A X +A X +C Y +A Z +A Y +A X +C Z +A Z +A Z +A Z +C Z +A X +A Z +C Z +B X +C Y +A Z +B Z +B Z +C Z +C Z +A X +A Z +A Z +B X +B X +A Z +A Z +A Y +C Z +A Z +A X +C Z +A Z +C Z +C Z +A Z +A Z +B Z +A X +B Y +A Z +A X +C Z +A X +B X +A Z +C Y +A Z +C X +C Y +A X +C X +C X +A Z +C Z +C Y +A Z +A Z +A X +A X +C Z +A Y +A Z +A X +B Z +A X +A Z +A Z +A X +B Z +A X +A Z +C X +A Z +A Z +C X +A Z +A X +A Z +A X +B Z +A Z +A Z +C Y +C Y +C Z +C Z +C Y +A X +A X +A X +A Z +A Z +C Y +A Z +C Z +A Z +C Z +B Z +B X +A Y +C Y +A X +A Z +A X +A X +A Z +C Z +C Y +C Y +A Y +A X +A Z +A X +C Z +A X +A Z +A Z +C Y +A X +A Z +A Z +A X +B Y +A Z +A Z +A Z +A Z +C Y +A Z +A X +A X +A Z +A Z +C Y +A Z +A Z +B Z +A Z +A X +A X +A Y +C Z +C Z +A Z +B Z +A Z +A Z +A X +A X +C Z +A Z +A X +A X +A Z +A Z +B Y +A Y +C Y +A X +A Z +C Z +C Y +A Z +C Y +A X +A X +A X +A Z +C Y +C Y +A Z +B X +C Y +A Z +A X +A Z +A Y +C Y +C Z +B Z +A Z +C Y +A X +C Z +A X +C Y +C Z +A Z +C Y +C Y +A Y +B X +A Z +C Z +B Z +B Y +A Z +C Y +A X +A Z +A Z +C Y +A Z +C Z +A Z +A Z +A X +A Z +A Z +C Z +A X +A Z +C Z +C Y +A X +A X +C Z +C Y +A Z +C Y +A Z +A X +A X +A Z +A Z +A X +A Z +C Y +C Z +A Z +B X +C Z +A Z +A Z +A X +B X +A Z +A Y +A X +C Z +B X +A Z +C Y +C Z +C Z +C Z +A Z +A Z +A X +A Z +C Z +C Y +A X +A Z +A Z +A Y +A X +A Z +A Z +C X +B Z +A X +A Z +A X +C Z +A X +C X +A X +C Y +C Y +A X +A X +A Z +B Z +A Z +A Y +B Z +A X +C X +A X +C X +A X +C X +A Z +A X +A X +A X +C Y +A X +A X +C X +C Z +A X +B Y +A X +B Z +A Z +A X +C Z +A Z +A X +A Z +A X +C X +C Z +A X +C Z +C Y +C Y +A X +A X +A X +C Z +C Z +A Z +C Z +A Z +B Z +A Y +B Z +A X +A Z +A Z +A Z +C Z +A Z +A X +A X +B Z +A Z +C Y +C Z +B Z +C Y +C Z +A X +A X +C X +B X +C Z +A Z +A Z +C Z +A X +A Z +A Z +B X +B Z +A Z +A Z +B Z +A Z +A Z +B Z +B Z +C Z +A Z +C Z +A Z +A Z +C Z +A Z +A Z +B Z +A Z +A X +A X +A X +A Z +C Z +A X +A Z +A X +A Z +B Z +B Z +C Z +A Z +A Y +C X +A X +A Z +A X +A X +C X +C Z +B Y +A X +A X +C Y +C Y +A X +A Z +A Z +B Z +B Z +A Z +C Z +A Z +C Z +C X +A Z +A X +A Y +A X +A Z +C Z +A X +A Z +A Z +A Z +A X +C X +B Z +A Z +A Y +C X +A Z +A Z +A Z +A X +A Y +A X +C Y +A Z +C Y +A Z +A Z +C X +A Z +A Y +C Z +A X +A X +A Z +A Y +A Z +A X +C Z +A Z +A Z +B Z +A Z +A Z +C X +B Z +C Y +A X +A Y +B X +A Z +C Z +C X +C Z +A X +A X +A Z +A Z +A X +A Z +B Z +B Z +A Z +B Y +B Z +A X +A X +C Z +A Z +C Y +B Z +C Z +C Z +A Z +A X +B Z +A X +A X +A Z +A Z +A X +B Z +A Z +C Z +A Z +A Z +B X +C Z +B Z +C Y +A Z +A X +A X +B X +A X +B Z +C Y +C Y +B Z +C Y +C Y +A X +A Z +A Z +C Y +B Z +A X +A Z +A X +B X +A X +C Y +A X +A X +B Z +A X +B X +A Z +C Y +B Z +A X +A Z +A X +A X +B X +A X +A X +A X +A Z +A Z +C Y +A Z +B Z +C Z +C Y +C Z +A X +A Z +A X +C Z +C Z +C Z +C Y +A X +B X +B X +C X +C Z +C X +C Z +B Z +A Y +A X +C X +B X +A X +A X +A Z +A X +A Z +A X +A X +A Z +A Z +C Z +A X +C Y +C Y +C Z +A Z +A X +A Z +A X +A Z +A Y +A Z +A X +A X +A Z +A X +A Y +A Y +C X +A Y +C Y +C X +A Z +C Z +C Y +C Z +A Z +C X +A X +C Z +A Z +C Y +B Z +A Z +A Z +A Z +C Y +A X +A X +A Z +A Z +A Z +B Z +C Z +A X +C Y +A X +A Z +A X +C X +C Z +A Z +C Y +A Y +A Y +A Z +A X +A Z +A Y +A X +C Z +A Z +A Z +A X +A X +B Z +B Y +B Y +C X +A Z +A Z +C Z +A X +A Z +C Y +B X +C Y +A Z +A Z +A X +A Z +A X +A X +C Z +A Z +A Z +A X +A X +C Y +A X +A X +C Y +A Y +C X +A X +C Y +A Y +A Z +B Y +A X +C Z +B X +A X +C Z +A Z +B Z +A Z +A Z +C X +A Z +B Z +C X +A Z +C Y +A Z +C Z +A Z +C X +A X +A Z +A Y +B X +A X +B X +A Z +A Z +C Y +A Z +C Z +A Z +A Z +A Z +C X +A Z +B X +A X +A Z +C Z +A Z +A X +C Y +A Z +C Y +A Z +A Z +C Z +A X +A Z +A Z +B X +A Z +A X +C Z +B Y +A Z +A X +C Z +A X +A Z +A Z +A Z +C Z +A Z +A Z +C X +A X +A X +C X +A X +A X +B Z +A Z +A X +B X +A X +A Z +C Y +A Z +B X +C Y +A X +C Z +A Z +B Z +A X +A Z +A Z +C Z +A X +C Z +A X +C X +A Y +A X +A Z +C X +A X +A X +A X +A X +A Z +A X +B Z +C Z +C Y +B Z +B Z +B X +A Z +A X +B Z +A Z +A X +C Z +A Z +C Y +B Z +C Y +A X +C X +A X +A Z +C Y +A Z +A X +A Y +C Y +C Y +A Z +A Z +C Y +A Z +A Z +A X +C Y +B Y +A X +A X +A X +C Y +B X +A Z +A Y +A Z +A Z +A X +C Z +A Z +A Z +C X +A Z +B Z +B X +A X +C Z +A X +C Y +A Z +C Z +C Y +C X +C Y +A Z +A X +A Z +A Z +A Z +B Z +A Z +C Z +A Z +C Z +B Z +C Z +C Z +A Z +A Z +B X +A Z +A X +A Z +A X +A Y +A Z +B Z +C X +A Z +A Z +B X +A X +C X +C Z +A X +A Z +A X +C Y +C Z +A Z +C Y +A X +A Z +A Z +B Z +C Y +A Z +A Z +C Z +A X +C X +A Z +A Z +A Y +C Z +C Z +A Z +A X +B Z +A X +A X +A X +A X +A Z +A Z +A X +A X +C Z +C Y +C Y +C Y +A Z +C X +B Z +C Y +C Z +A X +A X +A Z +C Z +C Z +A Y +C Y +B X +C Y +A X +A X +A Y +A X +A Z +A Z +A X +A Z +A Z +A Z +A X +A Z +B Z +A X +A X +A X +C Z +C X +A Z +C Y +C Z +A X +A Z +A Z +A X +A Z +A X +B Z +A Z +A Z +A Z +C Y +C Z +B Z +A Z +B Z +A X +A X +A X +C Y +A Z +A Z +A Z +C X +A X +A X +A Z +A Z +A Z +A Z +B Z +A X +A Z +A X +C Z +A Z +A Z +A Z +B Z +A Y +A Z +C Z +B Z +C Y +A Z +A X +C Y +A X +A X +A Z +A Z +A X +B Z +B X +C Z +C Z +A Y +A Z +A X +A Z +A Z +A Z +A Z +A Z +B Z +A Z +B X +A Z +A Z +C Z +B Z +A Z +C X +B Z +C X +B Z +A Z +A Z +A Z +A Z +A X +B Z +A X +B Z +C Y +A Z +A Z +C X +A X +A Z +A Y +A Z +C Y +C X +C Z +A X +A Z +C Z +A Z +A X +A Z +B Z +A X +A Z +B Z +C Y +A Z +C Y +A Z +C Y +B X +C Y +A Z +B Z +A X +B Z +B Z +C X +A Z +C Z +A Z +C Z +A Z +C Z +B Z +C Y +C Z +A Z +C Y +A Z +C X +B Y +B Y +C X +C Y +A Z +C Z +A Z +C X +A Z +A Z +C Y +A Z +A Z +C X +A Y +A X +A X +B Z +A Z +C Z +A Z +B Z +C Y +C Z +A Z +C Y +B X +C Z +A X +C X +C Y +C Y +C Y +A Z +A Z +B Y +C Y +A Z +A X +A Z +A X +A Z +C X +C Z +A X +C Z +B X +A X +C Z +A Z +C X +A Y +A Z +A X +A Z +C Z +B Z +B Z +A Z +C Y +A Z +C Z +C Y +C Z +A Z +A Z +B X +C X +C Z +A X +A Z +A Y +C Y +A X +A Z +C Y +A Z +B X +A Z +A Z +A Z +A Z +C X +A X +A Z +A Y +A X +B Y +A X +A X +A X +A X +B Z +A X +C Y +C X +A X +A Z +A X +A Z +A Z +A Z +A Z +A X +A Z +C X +C Z +C Z +A X +B Y +A X +C Y +A X +C Z +A X +A Z +A Z +A Z +A Z +C X +A X +C Y +A Z +A Z +C Y +A Z +A X +A Z +A X +A Z +B Y +C Y +B Y +C Y +A Y +A Z +C X +B X +A X +A Y +C Z +A X +B Z +A X +A X +A Y +A X +A Z +A Z +C Z +C X +A Z +C Y +A Z +A Z +C X +A Y +A Z +A X +A Z +A Z +C X +A Z +A Z +A Z +C Y +A X +A X +A X +C Z +A Z +C Y +A X +A X +C Y +C X +C Y +A Y +C X +A Z +A Z +A Y +C X +A Z +A Z +A Z +C Y +C X +A Z +B Z +A Z +A X +C Y +A X +C Y +C Y +A X +C Y +A X +C Y +B Z +A Z +A X +A Z +A X +A X +A Z +A X +A X +C Z +A Z +B Y +C X +B X +B X +A Z +A Y +B Y +A Z +A X +A X +C Y +C X +B Z +A Z +C Y +C X +C Y +A Y +A Z +C X +A X +A X +A Z +A Z +B Z +C X +A Z +B Z +A X +B Y +C X +A X +A Y +C X +A X +C Y +A Z +A Z +A X +A X +C Z +C Z +B Z +A X +B Z +B Y +A Z +A Z +C Y +A Z +B Y +A Z +A X +C Z +C Z +A X +A X +A X +A Z +A Z +C Y +A X +A X +A Z +A X +C X +A Z +A X +B Z +B X +A X +A X +A Z +B Z +A X +A Z +C Y +C Y +B Z +C Z +A X +B X +B X +A Z +A X +A Z +C Y +A X +A X +B Y +C Y +A X +A X +C Y +A Z +A Z +C Z +A Z +B Z +A Y +A Z +C Y +B Y +A X +C X +A X +C Z +A Z +A X +A Z +A Z +A X +B Z +C Z +A Z +A X +C X +A X +C Y +B Z +B X +C Z +C X +A X +A X +A Z +A X +C Y +B Z +A Z +C Z +A Z +A Z +A X +B X +A X +A Z +A X +A X +A Z +A Z +A Y +A Z +C Z +B Z +A X +A X +A X +A Z +B Z +A Z +A Z +C Z +C Y +C Y +A Z +A X +A Z +C Z +A X +A X +A Z +A Z +C X +B Y +A X +B Z +B Z +A Z +A Z +C Z +C Z +A X +A X +A Z +C Z +A Z +C Z +B X +A X +A Z +A Z +C Z +A X +A Z +B Y +B X +A X +C Y +C X +C Y +B X +A X +C Y +A Z +B Y +A Y +A X +C Y +A Z +A Z +A Z +A Z +A Z +C Z +A Z +A Z +A Z +C X +B X +C Z +A X +B X +A X +C Y +A X +C X +A X +A Z +A Z +B X +A X +A Z +A X +C Z +A Z +A Z +A X +C Z +A Z +C X +A Z +A Z +A Z +A Z +B Z +A X +A X +C Y +A Z +A Z +B Z +A X +A Z +A Y +A Z +C X +B Z +A Z +A X +B Y +A Z +A X +C X +C X +A X +A Z +A X +A Z +B Z +B Y +A Y +A Z +C Y +B Z +A Z +C X +C Y +C Z +C X +A X +A Z +A X +A X +A Z +A X +A X +A X +A Z +C Z +C Y +A Z +A X +C X +B Z +C Z +C Y +C Y +A Z +A X +A Z +A Z +A Z +A X +A Z +A Z +A X +C Z +A X +A X +A Z +C X +B Y +A X +C Z +A X +C X +A Z +A X +A Y +C Z +A X +A Z +C X +B X +A Z +A Z +A X +A X +A Z +C Y +C Z +A X +A Z +C Z +C X +A X +A Z +A X +A X +B X +C Z +B Z +A Z +A X +A X +B Y +A Z +A X +A X +A Z +A Z +A Z +A X +C Y +A Z +C Y +A Z +A Z +A X +C Z +A Z +B X +A X +C Z +A X +A Y +B X +C X +A X +A X +A Z +A X +A X +A X +C Y +A Y +A Z +B Z +B Z +B Z +A Z +A Z +A Z +A X +B X +C Y +A X +A Z +C Z +B Y +A X +A Z +A Z +A X +A X +B Z +A X +C Y +A Z +A X +A X +A Z +A Z +A Z +A Z +A Z +A X +A Z +A X +A X +C Z +A X +C Z +A Z +C Y +A X +A Z +C Z +A Z +A Z +A X +A X +A Z +A X +A Z +B Z +A X +A X +C X +A Z +A X +A Z +C Y +C Y +C Y +C Y +C Z +A Z +B X +C Z +A X +A Z +C Y +A X +A Z +B X +A Z +C X +C Z +C X +C X +A Z +A Z +B X +A Z +A Z +A Z +B Z +A Z +C Z +A X +A X +A Z +A X +A Z +C Z +C Z +A Z +C Z +C X +A Z +A X +B Z +A X +B Y +C X +A X +A Y +A Z +A Z +A X +A X +A Z +A X +A Z +A X +A Z +A X +A Y +A X +C Z +A Z +A Z +A X +A X +A Z +A X +C Y +C Z +A Z +A Y +A Z +A X +A Z +C X +B X +A Z +C Z +B Y +A Z +A Z +C Y +A X +A Z +A Z +C Z +C Y +A Z +B Y +A X +C Y +A X +A X +A Z +C Z +A Z +A Z +A X +C Z +A X +C Y +C Y +A X +B X +C X +A Y +A X +A Z +B X +A X +B Z +A Z +A X +C X +A X +B X +A X +A Z +A X +C Y +A Z +C Z +C Y +A X +B X +C Y +C X +A X +A Z +A X +A Z +A X +A X +A Z +A Z +A X +A Z +A Y +A X +A X +A Y +A Z +A Z +C Z +A X +A Z +A X +A X +B X +A X +B Y +C Y +A Z +B Z +A Z +B Y +A Z +C Y +A Z +A X +A X +A Z +C X +C Z +B X +A X +A Z +A X +A Z +A Z +B X +A Z +A X +C Z +B Y +C Y +C X +A X +A Z +A X +C Y +A Z +C Z +A X +A X +A X +A Z +A Z +A Z +B X +C X +A Y +B Z +A X +A Z +A Z +C X +C Y +A X +A Z +C Y +A X +A Z +A X +A Z +A X +A X +B Z +A X +C X +A X +A X +A X +A Z +A Z +A X +A Z +C Y +C Z +B Z +B X +A Z +A X +C X +C Y +A X +B Z +B Z +A Z +B Z +C Y +A X +A X +A X +C Y +A Z +A X +A Z +A Z +A Z +A X +A Z +A X +A Z +C Y +A X +C X +C Y +C Y +C X +A X +C Y +A Z +C Y +B Z +B Z +C Z +A X +B X +C X +A Z +A Y +A Z +B Z +A Z +B Z +A X +A X +A Z +A Z +A Y +A Z +A X +A Y +A Z +A Z +A Z +A Z +B X +A Z +A Z +A Z +A Z +C Y +B Y +C X +A Z +B Z +B X +A X +C Z +A Z +C Z +A Z +A X +A X +A X +A X +A X +A Z +C Y +A X +C X +A Y +C X +C X +A X +A Z +A X +C Z +A X +C Y +B Z +C Y +C Z +B X +A Z +C Y +A Z +C Y +A X +A X +A X +A Z +A Z +A Z +A Z +C Z +C Y +A X +C Y +B Y +A X +A X +A Z +C Y +C Z +A X +A X +A Z +A Z +A X +A X +A Z diff --git a/02/src/part-1.rs b/02/src/part-1.rs new file mode 100644 index 0000000..eff4724 --- /dev/null +++ b/02/src/part-1.rs @@ -0,0 +1,67 @@ +// TODO: This should of course all be table lookups instead of nested switches. + +use std::io::{BufRead}; + +fn main() { + let stdin = std::io::stdin(); + let handle = stdin.lock(); + + let mut score: usize = 0; + + for l in handle.lines() { + let line = l.unwrap(); + let mut chars = line.chars(); + let opponent_move = chars.next().unwrap(); + assert_eq!(chars.next().unwrap(), ' '); + let my_move = chars.next().unwrap(); + + score += match opponent_move { + 'A' => { // Opponent plays rock. + match my_move { + 'X' => { // We play rock. + 1 + 3 + }, + 'Y' => { // We play paper. + 2 + 6 + }, + 'Z' => { // We play scissors. + 3 + 0 + }, + _ => panic!("Unreachable") + } + }, + 'B' => { // Opponent plays paper. + match my_move { + 'X' => { // We play rock. + 1 + 0 + }, + 'Y' => { // We play paper. + 2 + 3 + }, + 'Z' => { // We play scissors. + 3 + 6 + }, + _ => panic!("Unreachable") + } + }, + 'C' => { // Opponent plays scissors. + match my_move { + 'X' => { // We play rock. + 1 + 6 + }, + 'Y' => { // We play paper. + 2 + 0 + }, + 'Z' => { // We play scissors. + 3 + 3 + }, + _ => panic!("Unreachable") + } + }, + _ => panic!("Unreachable") + }; + } + + println!("Total score: {}", score); + +} diff --git a/02/src/part-2.rs b/02/src/part-2.rs new file mode 100644 index 0000000..2c6e146 --- /dev/null +++ b/02/src/part-2.rs @@ -0,0 +1,74 @@ +// TODO: This should of course all be table lookups instead of nested switches. + +use std::io::{BufRead}; + +fn main() { + let stdin = std::io::stdin(); + let handle = stdin.lock(); + + let rock: usize = 1; + let paper: usize = 2; + let scissors: usize = 3; + let lose: usize = 0; + let draw: usize = 3; + let win: usize = 6; + + let mut score: usize = 0; + + for l in handle.lines() { + let line = l.unwrap(); + let mut chars = line.chars(); + let opponent_move = chars.next().unwrap(); + assert_eq!(chars.next().unwrap(), ' '); + let my_move = chars.next().unwrap(); + + score += match opponent_move { + 'A' => { // Opponent plays rock. + match my_move { + 'X' => { // We need to lose, play scissors. + lose + scissors + }, + 'Y' => { // We need to draw, play rock. + draw + rock + }, + 'Z' => { // We need to win, play paper + win + paper + }, + _ => panic!("Unreachable") + } + }, + 'B' => { // Opponent plays paper. + match my_move { + 'X' => { // We need to lose, play rock. + lose + rock + }, + 'Y' => { // We need to draw, play paper. + draw + paper + }, + 'Z' => { // We need to win, play scissors + win + scissors + }, + _ => panic!("Unreachable") + } + }, + 'C' => { // Opponent plays scissors. + match my_move { + 'X' => { // We need to lose, play paper. + lose + paper + }, + 'Y' => { // We need to draw, play scissors. + draw + scissors + }, + 'Z' => { // We need to win, play rock + win + rock + }, + _ => panic!("Unreachable") + } + }, + _ => panic!("Unreachable") + }; + } + + println!("Total score: {}", score); + +} diff --git a/02/test.txt b/02/test.txt new file mode 100644 index 0000000..db60e36 --- /dev/null +++ b/02/test.txt @@ -0,0 +1,3 @@ +A Y +B X +C Z |