diff options
author | Santo Cariotti <santo@dcariotti.me> | 2022-12-06 21:07:48 +0100 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2022-12-06 21:07:48 +0100 |
commit | 0965ff1b6dca8ef6beb0f654716195be68bacdea (patch) | |
tree | 535bab7cd7d4fad44573093f1f1c0fdc7c25afea /2022 | |
parent | f725c1af90a4456ce9d4b2143ffb51defa7559ad (diff) |
Add day 2
Diffstat (limited to '2022')
-rw-r--r-- | 2022/Cargo.toml | 2 | ||||
-rw-r--r-- | 2022/day2/Cargo.toml | 8 | ||||
-rw-r--r-- | 2022/day2/example.txt | 3 | ||||
-rw-r--r-- | 2022/day2/input.txt | 2500 | ||||
-rw-r--r-- | 2022/day2/src/lib.rs | 184 |
5 files changed, 2696 insertions, 1 deletions
diff --git a/2022/Cargo.toml b/2022/Cargo.toml index 8cefc09..4aeef49 100644 --- a/2022/Cargo.toml +++ b/2022/Cargo.toml @@ -1,2 +1,2 @@ [workspace] -members = ["day1"] +members = ["day1", "day2"] diff --git a/2022/day2/Cargo.toml b/2022/day2/Cargo.toml new file mode 100644 index 0000000..8aa34bb --- /dev/null +++ b/2022/day2/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day2" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/2022/day2/example.txt b/2022/day2/example.txt new file mode 100644 index 0000000..db60e36 --- /dev/null +++ b/2022/day2/example.txt @@ -0,0 +1,3 @@ +A Y +B X +C Z diff --git a/2022/day2/input.txt b/2022/day2/input.txt new file mode 100644 index 0000000..90f6f1b --- /dev/null +++ b/2022/day2/input.txt @@ -0,0 +1,2500 @@ +A Y +A Y +B X +A Y +C Y +B Y +B Z +B Y +A X +B X +C Z +B Y +B Y +B Y +B Y +C X +A Z +B X +A Y +A Y +B Y +A X +C X +B Y +A Y +B Y +C X +A Z +B Y +A X +A Y +B Y +A Y +A X +B Y +B Y +B Y +B X +A X +C Y +A X +C Z +B Z +A Z +A Z +C X +A X +A X +B Y +B Y +C Y +B Y +B X +B Y +B Y +B X +C X +A X +A X +A Z +C X +A Z +A X +B Y +B Y +A Y +A Z +B Y +B X +B Y +B Y +B X +C Z +A X +B X +B X +A Y +B X +C Z +B Y +A X +C Z +A Y +B Y +B Y +A X +A Z +B Y +B Y +A Z +A Z +B Y +A X +A Z +C Y +A X +B Y +C X +A X +B Y +A X +A Z +C X +A Y +A X +B X +A X +B Z +B X +B Y +A X +A Y +B Y +B Z +C X +B X +A X +C Z +C Y +A Y +B Y +A X +B Y +C Y +B Y +C Y +B Y +C Z +C X +A Y +B Y +B X +A X +A X +A Y +A Y +B Y +A Z +B Y +A X +C X +B Y +B X +C X +A Y +B Z +B Y +B X +B Y +B Y +C Z +B X +B Z +A X +B Y +A X +B Y +C Z +A X +A Y +B Z +A X +B X +A Z +B Y +A Y +A X +B Y +C Z +B X +B Y +C X +B X +A X +C X +B X +B Y +B Z +B Y +B Y +A X +B Y +A X +A X +B X +A X +A X +B Y +B Y +B Y +C X +B Y +A Z +A X +B Y +A Y +A Z +B Y +A Z +C X +B Y +C X +B Y +B Y +A X +B Y +A X +B Y +B X +B Y +B Y +B Z +B Y +A Y +A X +A X +A X +C Z +A Y +A X +C Y +A X +B Z +B Y +B Y +B Y +A Z +B Y +B X +A Z +B Y +A Y +B Y +A Z +B Y +A X +B Z +A Z +C X +B Y +B Y +B Y +B X +A X +B X +A Y +B X +B Y +B Y +A X +B Y +B Z +B Y +B Y +B X +B X +C Z +A Y +B Y +B Y +B Y +B X +A X +B X +A Y +A Z +A Z +A Z +A X +A Y +B Y +C Y +A Z +A Z +A Z +C X +A X +C X +A Z +B X +A Y +B Y +A Z +B Y +B X +C Y +A Z +A X +C X +C X +C X +B Y +A X +A Y +C X +B Y +C Z +B Y +B Y +A Y +B Y +A Y +B Y +B Y +B X +A X +A X +A Z +A Y +B X +B Y +A Z +C X +A Y +A X +B Y +B Y +B X +A Z +B Y +A X +A X +B Y +A X +C X +A Z +A Z +B Y +A Z +A Y +A Y +A Y +B Y +A Y +A Z +A Y +A X +A Z +B Y +B Y +C X +B X +C Z +B X +A Z +C Y +B Y +A X +B Y +A Y +A X +B Y +B X +C Z +A Z +A Z +B Y +A Z +B Y +B Y +A X +A X +A X +B Z +A Y +B Z +A Y +C Y +A X +B X +A Y +B X +B Y +A X +A Y +A X +C X +C Z +B Y +A Y +B Y +B Z +A X +B Y +C Y +A Y +A Z +B Y +A X +A Z +A Y +B Y +B Y +A Z +C Z +B X +A Y +C Y +A X +A X +A X +B Y +C Z +A X +A X +B X +A X +A X +A Y +A X +C X +A X +A Y +B Z +A X +C X +A X +B X +A Y +A X +A X +A X +C Z +A X +A X +B X +B Y +A Y +A X +A Z +A Y +A Y +A Y +A Z +B X +A X +A X +A X +A Z +B Y +A X +A Y +B X +C X +B Y +A Z +A Z +A Z +B Z +B Y +A Z +A Z +A X +A Y +A X +A X +A X +A Y +A Z +B Y +A Z +B X +B X +A Y +A X +B X +B X +C Z +B X +A X +A Z +C X +A X +A X +B Z +A X +B X +A X +A X +A X +B Z +A Z +A Y +A Z +B Y +A X +A Y +A Y +B X +C Z +A X +A X +A X +B Y +B Y +A X +A X +B Y +A X +B X +A Y +C X +B X +B Y +C Z +B Y +A X +C Z +B Z +B Y +A Z +B X +B Y +B X +B Y +B Y +B Y +B X +B Y +A X +B Z +B Y +C X +B Y +C X +A Z +B X +A Z +A X +A Z +A Y +A X +A Z +B Y +B X +B X +B Y +B X +B X +B Z +B Z +B Y +A X +C X +B Y +B X +B X +C X +B X +B X +B Y +A Z +A Z +B Y +C Y +A Z +B Y +B Z +A Z +C Y +C X +A X +B Y +A Y +B X +B Y +B Z +A Y +A Z +A X +A X +C X +B Z +A Y +A Z +B Y +A Y +A Z +B Y +A Z +C Z +B Y +A X +A Z +B Y +B Y +A Y +A X +C Z +B Y +B X +A X +C Z +B Y +B Y +B Z +B Y +A Y +B Y +A Z +C Z +B Y +B X +B Z +B X +A X +A Y +A Z +A Z +A X +A X +B Y +B X +A Z +A X +B Y +B Y +B X +A Y +B Y +C Y +B Y +A X +B Y +B X +B Z +A X +B Y +B Y +A X +A X +A X +C X +B X +A Z +B X +C X +B Y +A Y +B Y +C X +B Y +B Y +B X +A X +A X +A X +A X +B Y +B Y +B Z +A Z +A Z +A Z +A Y +B X +A Y +B Y +C Z +C X +B Y +B Y +B Y +B Y +A X +A X +A Z +C Y +B X +A Y +B Y +B Y +C Z +B X +A X +A X +A Z +C X +B Y +B X +C Z +B X +A Y +B X +B X +B Z +C X +A Z +B Y +B X +B Y +B Y +A X +B Y +A X +A X +A Y +A Z +B Z +B Y +A Y +A Y +C Z +A Y +A X +B Y +B Y +C Z +B Y +A X +B X +A X +B Y +A X +A Z +B Z +B Y +A X +C X +A X +A X +B Y +A Y +A X +A Z +B Y +C Z +C X +A X +B X +B X +B Y +B X +B Y +B Y +A Z +A Y +A Z +A X +B Y +B X +B Y +C X +B Z +B X +C X +B Y +A X +A Y +A Y +B X +A X +B Y +B X +A X +B X +B Y +C Y +A Z +C Z +B X +B X +B Y +A Z +C Y +B X +A Z +B Y +A Y +A Z +B Y +A X +A Y +C Z +B Y +A X +B Y +B X +A Y +B Y +C X +A Y +B Y +B Y +A X +C Z +B Y +B X +A X +B X +B Y +A X +B Y +B Y +B Z +A X +C Z +A Y +B X +A X +C X +B Z +B Y +A Z +B X +A Z +B Y +C Z +A X +B Y +B X +B Y +A X +B Y +A X +A Y +A Y +A X +B Y +A X +B Y +A X +A Y +A Y +C X +B X +B Y +A Z +B X +A X +B Y +A Y +B X +B Y +A Z +B X +B X +A Y +B Y +A Z +B X +B Y +A Y +A X +A X +B X +C Z +A Y +B Y +A Z +A Z +A Z +B Y +A Y +A X +A Z +B X +B Y +C Y +A X +A X +C X +A Z +B X +B Y +B X +B Y +B Y +B Y +A X +B Z +B Z +B Z +B Y +A X +A X +B Y +A Z +B Y +C Y +B X +B X +B X +B Y +B Y +A Y +A X +B X +A X +A Z +A Y +C Y +B Y +B Z +B Z +A Y +B Y +A Z +B X +B Y +B Y +B X +B X +B Y +A X +C Z +B Y +A X +A X +A Y +B X +B Y +A Z +A Y +B Y +A Y +A X +A Z +A Y +A X +A X +A Y +B X +A X +B Y +B Y +B X +B Y +B Y +B Y +A Y +B X +A X +C Y +A Y +B Y +C X +C X +B Y +B Z +A Z +A Y +B Y +B Y +A Y +B Z +A Z +A X +B Y +A X +C Z +B Y +B Y +A Z +A Y +B Y +A Z +B Y +A Z +A Y +A Z +C Y +A Z +A X +A X +A Z +A X +B Y +A Z +B X +A Y +B Y +A Z +B X +B Z +B X +A Y +A Y +B Y +A Z +A X +B X +A Z +A X +B Y +B X +C X +A Z +C X +C X +B Z +A X +B Y +A Y +A Y +A Z +B Y +C X +A Z +A X +A Y +A Z +A X +A Y +A Y +A X +C X +B Y +B Y +B Y +A Z +B Y +A Z +B Y +C X +B Y +A X +B X +B Y +C X +A Z +B Y +B Y +B Y +A X +C Z +A Z +B Z +A X +A X +A X +A X +B Z +A Y +B X +B Z +A X +B X +A Y +A Y +C Z +B Y +B Y +A X +C Y +B X +B Y +A Y +C Z +A X +B X +A Z +C Z +C Z +B X +A Z +A X +B Z +A Z +B Y +B X +B Y +A Z +A Y +B Y +B Z +A X +B Z +A Z +A Y +C Y +A X +B Y +C Y +A Z +A Z +B X +B X +C X +A Y +B X +B X +B Y +A Y +C Z +A Z +A Y +B X +B Y +B Y +A X +C X +B X +A X +A Z +B Y +B Y +A X +A Y +B Y +C Z +A X +A X +B Y +A Y +A X +C Z +B X +C Y +A X +A X +A Y +B X +B Y +A X +B Y +A Y +B Y +B Y +B Y +B X +C X +A Z +A Z +A X +C Y +A Y +C X +A Z +A X +A X +B Y +A X +A X +B X +B Y +A Y +B Y +A X +B X +B Y +B Y +B X +C X +A Z +B Y +A Y +A Z +B Y +B Y +B Z +B Z +A X +B Y +A Y +A Z +A Y +A X +A Z +B X +A X +B X +A Y +C X +C X +A X +B X +A X +C X +A X +A Z +A Y +B Y +C X +A Y +A Y +B Y +B X +B Y +B Y +A Z +A Y +A Z +C X +B Y +B Y +A X +A X +B Y +A X +B Z +B X +B Y +A X +A Z +B Y +A Y +B Y +A X +C Z +A Z +A Y +B Y +B Y +B Y +B X +A Z +A Y +A X +B X +A Y +B Y +A Y +B Y +A Z +A Z +B Y +B X +B Y +A Y +C Y +B Z +B Y +A Y +C X +A Y +B Y +B Y +B Y +B Y +A X +B X +A Z +B Y +A Y +B Z +C X +B Y +A X +B X +B Y +B Y +A Y +A X +A Y +C X +B Y +A Y +A X +B Y +C X +A Y +B X +C Z +B Y +B Y +C Z +A X +A X +A X +A X +B Y +A Z +A Z +B X +A Z +A Z +A X +C Y +A Z +B Y +B Y +A Z +A Z +C Z +B Y +B X +C Z +C Z +B Y +B X +A Z +B X +C Z +C X +B Z +A Y +C Z +B Y +B Y +A Z +B Y +C X +C Y +B Y +C X +A X +A X +B Z +A Y +B Z +B Y +A X +B Z +A X +C X +B Y +A Y +A X +A X +B X +A X +A Y +A Y +B Y +B Z +B Y +A X +A Z +B Y +A Y +B Y +C Y +A X +B X +A X +B Y +A X +A X +B X +B Y +A Z +A Y +A X +C X +B X +C X +B Y +A X +B Y +A Z +A Z +C X +A Z +B Y +A Y +B Y +C X +B Y +B Z +A X +B Y +B X +A Z +B Z +B Y +A X +A Y +A Z +A Y +B Z +A X +A Y +A Z +A Y +C X +B Y +C Z +B Y +B Z +B X +B Y +A Z +C X +C Z +A Y +A Z +B Y +B X +B Y +B X +B X +A Y +A X +B X +B Y +A X +A X +B X +B Y +C X +A Y +C Y +A Z +C X +A Y +A Z +A Y +A X +A Z +B Y +C X +B Y +A Z +A Y +B Y +B Y +B X +B Y +C Z +A X +B X +A X +A X +A X +B Y +A X +B Z +B X +B Y +B Y +A X +B Z +A X +A Y +B Y +A X +B X +B Y +B X +A Z +A X +B Y +C X +B Y +A Z +B X +B Y +A Y +B X +A X +A X +A Y +A Y +B X +B Y +B Y +A X +A Y +B Y +A X +A X +A X +B X +B Y +A Y +A X +B Y +A X +B X +B Y +B Y +A Z +B X +B Y +B Z +A X +B X +A Z +A X +A Y +A X +B Y +B Y +A X +B Z +A X +B Y +B Z +A Y +A Y +A Z +A Y +B Y +A Y +B Y +A X +C Z +A Y +B X +B X +A Y +A X +B Y +C X +B X +B Z +A Y +A Y +C X +A X +B X +A X +A X +A Y +C X +A X +B Z +C Z +B X +B Y +A Z +C X +A X +B Y +B Y +A Y +B Z +B Y +B Y +A X +A X +C Z +B Y +B Y +B Y +A Z +A Z +B X +A X +B Y +A X +B Z +A X +B Y +B X +B Y +B Y +B Y +B Y +B Z +B Y +A Z +A X +C X +B Y +B Y +A X +B Y +B Y +A Z +A Z +A Z +A Z +A X +A Z +B X +B Y +B X +C Y +A Y +C X +B X +C X +A Z +B Y +B Y +A Y +B X +B Y +A Y +A X +A X +B Y +B X +A Y +B Y +B Y +C Z +C X +B X +B Y +A Y +A Z +B Y +A X +C Z +B Y +A Y +B Y +B Z +A X +A Z +A Y +A X +A Z +B Z +A Z +B Y +A Y +A X +A Z +B Y +B Y +B Y +B Y +B Y +A Z +B Y +C X +B Y +A Y +B X +B X +B Y +B Y +C X +C X +B Y +A Y +B Y +B Y +B X +A Z +B Y +B Y +B Y +A X +B Y +A Z +B Y +A X +B Y +B Y +A Z +B Y +A Z +C Z +B X +B Y +A Y +C Z +B Y +B X +B Y +A Z +A Z +B Y +C X +B Y +A Y +B Z +B Y +B Y +B X +A Z +A X +B Y +A X +A X +B X +B Y +A Z +B Y +C Z +A Z +A X +C Z +B Y +B X +C X +A X +A Z +A X +B Y +B Y +B X +A Z +B Y +B Y +C Z +A X +B Y +B Y +B X +B Y +B Y +C X +B Z +B Y +A X +B X +B X +B Y +A X +A Z +B Y +A X +A Z +A X +B Y +C Z +C X +C Z +A Z +B X +B Y +A X +B Z +A Y +A Z +A Z +A Z +A X +C Y +A X +B X +A Y +C Z +A X +B Y +B Y +A X +A Z +B Y +A Z +A X +A Z +B Y +A Y +B Y +A Y +C Y +B X +A Y +B Y +A X +B X +B Y +A Y +B Y +C Y +C X +B Y +B Y +B Z +B X +A Y +B Y +B Y +A X +C Y +C X +A X +B Y +B Y +B X +A X +B X +B Y +B Y +C X +B Y +B X +B X +A X +A X +B Y +B Y +B Y +B Y +B Y +C Z +A Y +B Y +C Z +B Y +C X +B Z +B Y +A X +A Z +B Y +A Y +A X +B Y +B Z +A X +C Y +B Y +B Y +A Z +A Y +B X +B Y +B Y +B Y +A Y +C Y +B X +B Y +B Y +B Y +B Y +B Y +A Y +B Y +A Z +B X +A Y +B X +B Y +B Y +A Z +B Z +B Y +C Y +A X +A Z +A X +B Y +C X +C Z +C Z +B Y +B Y +B Y +A Y +B X +B Y +C X +B Y +A Y +A Z +A X +A X +A Z +B Y +A Z +A X +B X +B Y +B Y +B Y +A Y +B Y +A Y +A Z +C Y +B X +C X +C X +A Y +B Y +A X +A X +A Y +A X +B Y +B Y +C X +B Y +C X +C X +C X +B Y +B X +B Z +A Y +C X +A Y +B Y +A Z +A Z +C Z +C X +A X +A X +A Z +B Y +C Z +B X +B Y +B Y +B Y +A Z +B Y +B X +B Y +B Y +A Z +A Z +B X +A X +B Z +A X +B Y +A Z +B Y +A Y +A X +B Y +B Y +C X +A X +B Y +C Y +B Y +B Y +A Y +A X +B X +B X +B Z +C X +B Y +B Y +C Y +B Y +A Y +B X +B Y +B X +A X +C X +C X +A X +A Y +A Y +B Y +A X +A X +B Y +A X +B Z +C X +B Y +A X +B Y +B Y +A Y +B Y +B Y +A X +B Z +B Y +B Y +A Z +B Z +B Z +B X +B Y +A Y +A Y +A X +B Y +A Y +B Y +A Z +B Y +A X +C Z +C Z +C X +B Y +B Z +B Z +C Z +B Z +B Y +C X +A Y +B Y +B Y +A X +C Z +A Y +A X +A Y +C X +A X +B X +C X +A Z +B Y +A X +A X +B Y +B Y +A X +B Y +A Z +A X +C X +B Y +C Z +B X +B Y +C Z +A X +B Z +A Y +A Y +B Y +C X +C Z +A X +A X +A Y +A Y +A Y +B Y +A X +A X +B Z +C Y +A Y +B Y +B Y +B Y +A X +A X +C Z +B Y +B Y +A X +B Y +B Y +A Y +A X +A Z +A Z +A Z +B X +A X +B Y +C Y +B Y +C Y +B X +A Y +C Z +A Y +B Y +A X +C X +A X +B Y +C X +A X +A X +B X +A Z +B X +C Z +A X +B X +A Y +C Y +C X +A X +A Y +A X +A X +B Y +A Z +A X +A Z +A Y +B Y +A Y +A X +B Y +A Y +A X +A X +B X +B Z +B Y +B X +C X +A Z +C X +B Y +A Y +B X +A Z +B Y +A Y +B Y +C X +B Y +B Y +C Z +B Z +B Y +A Z +A Y +B X +A X +A Z +A X +A Y +B X +A Z +A Y +A X +A X +B X +B Y +A X +C X +C Z +B Y +C X +B Y +A X +A X +B X +A X +A Z +B X +B Y +C X +B Y +B Y +A Z +A Y +A X +B X +A Z +A Y +C Z +A X +A X +A Z +C X +B Y +A Z +A Y +B Y +A Y +B X +B Y +C Y +B Y +C X +B Y +B Y +B Y +B X +C X +A X +B Y +B X +B X +B Y +A Z +B Y +A X +A X +A X +A X +C Y +A Z +A Y +C X +B X +A X +B Y +C X +C Z +B Y +A Z +B Z +B Y +B Y +A Y +B X +B Y +C X +B Y +A Y +B Z +A Z +A X +A X +A Y +C X +B Y +A Y +B X +B X +B Y +B Y +A Z +A Y +A Z +B Y +A Y +A X +B Y +C X +A X +B Y +A Y +A X +B Y +B Y +C Y +A X +A Z +A Y +B Y +B X +B X +B Y +A X +B Y +B X +A Y +B X +B Y +B Y +B Y +A Z +B Y +B Z +C X +A Z +B Y +B Y +C Y +A Y +B X +B Z +B X +A Z +B Y +B X +A Y +B X +B Z +A Z +C X +B X +B X +B Z +B Y +B Y +A Y +A Y +A Y +A Y +B Y +B Z +C X +A X +B Y +B X +A Y +C Z +B Y +A X +A Z +C X +A Z +A Z +C Y +B Y +A X +A X +C X +A Z +B Y +B Y +B Z +B Y +A X +C X +A X +A Z +A X +A X +A Y +C X +A Z +A X +C Y +A Y +C X +B Y +B Y +A X +B Y +A X +B Y +C X +B X +A X +A Z +A X +B Y +A Y +B Y +C X +B X +C Z +B Y +B Y +B Y +A X +B Y +A Y +A Z +C Z +A Y +B Y +C Y +C Z +A X +A Y +B Y +A Y +B X +C X +C Z +B X +A Z +A Z +B Y +A Y +A Z +B Z +C X +A Z +C X +B X +B Y +A Y +B X +A Z +A Y +A X +A X +B Y +A Y +C X +B Y +A X +B Z +B X +B Y +A Y +B Y +B X +A Z +A X +A X +B Y +A Z +B X +A Y +C Z +A Y +A X +B Y +B X +A Z +C Z +B X +A Z +A Y +A Z +B Y +B Y +C X +B Y +A Y +A Y +A Y +A X +B Y +B Y +A Z +A X +B X +A X +B Y +B Y +A Y +A Y +A X +B Y +B Y +B Y +C Z +B Y +A X +C X +A X +C X +B X +A X +A X +B Y +B Y +A X +B Y +B Y +A X +A Z +A Y +B Y +A X +C Y +C X +B Y +B X +B Y +B Z +B Y +A Y +B Y +A Z +C Z +A Y +A Y +B Y +B Y +A X +B Y +B Y +A Y +B Y +B Y +A X +A Z +A Z +A Y +B Y +A X +A Z +B Y +A X +B X +C Y +A X +A Y +B X +A X +A Y +A Z +C X +A X +A X +B Y +B Y +B Y +A X +A Z +A X +B Y +B Y +C Y +C Z +B Y +B Y +B Y +C X +B Y +A Z +A X +B X +B Y +C Z +A Z +A Z +B Y +A Z +A X +A Z +B Y +A X +C X +B X +A Y +B Y +C Y +A X +A X +B Y +A Z +A X +A X +A Y +A Y +A Y +B Y +A Y diff --git a/2022/day2/src/lib.rs b/2022/day2/src/lib.rs new file mode 100644 index 0000000..435c8f7 --- /dev/null +++ b/2022/day2/src/lib.rs @@ -0,0 +1,184 @@ +enum Player { + Rock, + Paper, + Scissor, +} + +impl Player { + fn from_str(c: char) -> Self { + match c { + 'A' | 'X' => Player::Rock, + 'B' | 'Y' => Player::Paper, + 'C' | 'Z' => Player::Scissor, + _ => panic!("Not valid player!"), + } + } +} + +struct Play { + l: Player, + r: Player, +} + +impl Play { + fn new(input: &str) -> Self { + assert_eq!(input.len(), 3); + + Self { + l: Player::from_str(input.chars().nth(0).unwrap()), + r: Player::from_str(input.chars().nth(2).unwrap()), + } + } + + fn points(&self) -> u32 { + let mut tot: u32 = 0; + + match self.r { + Player::Rock => { + tot += 1; + + tot += match self.l { + Player::Rock => 3, + Player::Scissor => 6, + _ => 0, + }; + } + Player::Paper => { + tot += 2; + + tot += match self.l { + Player::Paper => 3, + Player::Rock => 6, + _ => 0, + }; + } + Player::Scissor => { + tot += 3; + + tot += match self.l { + Player::Scissor => 3, + Player::Paper => 6, + _ => 0, + }; + } + } + + tot + } + + fn calc_secret_points(&mut self) { + match self.r { + // Means "Lose" + Player::Rock => { + match self.l { + Player::Rock => { + self.r = Player::Scissor; + } + Player::Scissor => { + self.r = Player::Paper; + } + _ => {} + }; + } + // Means "Draw" + Player::Paper => { + match self.l { + Player::Scissor => { + self.r = Player::Scissor; + } + Player::Rock => { + self.r = Player::Rock; + } + _ => {} + }; + } + // Means "Win" + Player::Scissor => { + match self.l { + Player::Scissor => { + self.r = Player::Rock; + } + Player::Rock => { + self.r = Player::Paper; + } + _ => {} + }; + } + }; + } +} + +fn get_plays(input: &str) -> Vec<Play> { + input + .trim() + .split('\n') + .collect::<Vec<&str>>() + .into_iter() + .map(|x| Play::new(x)) + .collect::<Vec<Play>>() +} + +pub fn part1(input: &str) -> u32 { + let mut tot: u32 = 0; + let rows = get_plays(input); + + for row in rows { + tot += row.points(); + } + + tot +} + +pub fn part2(input: &str) -> u32 { + let mut tot: u32 = 0; + + let mut rows = get_plays(input); + + for row in &mut rows { + row.calc_secret_points(); + tot += row.points(); + } + + tot +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_example() { + let data = include_str!("../example.txt"); + + let result = part1(data); + + assert_eq!(result, 15); + } + + #[test] + fn test_input() { + let data = include_str!("../input.txt"); + + let result = part1(data); + + assert_eq!(result, 11906); + } + + #[test] + fn test_example_part2() { + let data = include_str!("../example.txt"); + + let result = part2(data); + + assert_eq!(result, 12); + } + + #[test] + fn test_input_part2() { + let data = include_str!("../input.txt"); + + let result = part2(data); + + assert_eq!(result, 11186); + } +} |