commit cc16497716463dfe0109a978633d8c701638461f
parent 5aa3105c4741c213d3effd4e3745dd7a74e6f039
Author: Shimmy Xu <shimmy.xu@shimmy1996.com>
Date: Fri, 2 Dec 2022 17:58:52 -0500
Add 2022 day 02
Diffstat:
3 files changed, 2581 insertions(+), 2 deletions(-)
diff --git a/2022/day01/main.rs b/2022/day01/main.rs
@@ -15,7 +15,7 @@ fn main() {
}
fn part_1(input: &Vec<Vec<i32>>) -> i32 {
- (1..input.len())
+ (0..input.len())
.map(|i| input[i].iter().sum())
.max()
.unwrap()
@@ -23,7 +23,7 @@ fn part_1(input: &Vec<Vec<i32>>) -> i32 {
fn part_2(input: &Vec<Vec<i32>>, top_count: usize) -> i32 {
let mut top = BinaryHeap::new();
- for s in (1..input.len()).map(|i| input[i].iter().sum::<i32>()) {
+ for s in (0..input.len()).map(|i| input[i].iter().sum::<i32>()) {
top.push(Reverse(s));
while top.len() > top_count {
top.pop();
diff --git a/2022/day02/input.txt b/2022/day02/input.txt
@@ -0,0 +1,2500 @@
+A Z
+A Y
+B X
+B X
+C X
+B X
+A X
+A X
+C X
+A X
+A X
+A Y
+B X
+A Y
+C X
+C X
+A X
+A Y
+C X
+B X
+A X
+B X
+A X
+A X
+B Y
+B Y
+A X
+A X
+A X
+A X
+A X
+A Y
+A X
+B X
+B Y
+A Y
+C Z
+C X
+A X
+A Y
+A X
+A X
+A Y
+A X
+A Y
+A X
+B X
+C X
+A X
+B X
+A X
+C X
+A Y
+B X
+B X
+A X
+A X
+C Y
+B X
+A X
+C X
+B X
+B X
+A X
+A X
+B X
+A Y
+C X
+A Y
+A X
+A X
+A Y
+B X
+A X
+A X
+A X
+B Y
+A X
+A X
+A Y
+A X
+A X
+B Y
+B Y
+B X
+C X
+B Y
+A X
+C X
+C X
+A Y
+A X
+A Z
+B X
+C X
+A Y
+B X
+A X
+A X
+A X
+A Y
+C X
+A X
+A Z
+A X
+A Y
+B Y
+A X
+C X
+B X
+A Y
+B Z
+B X
+C Y
+B X
+B Z
+A Y
+B X
+C X
+C Y
+A X
+A Y
+A X
+B X
+A Y
+B Y
+A X
+C Y
+A Y
+B Y
+A X
+B Y
+B X
+B Y
+A X
+B Y
+A X
+C Z
+A X
+C X
+A Y
+A X
+C X
+A X
+A X
+A X
+C X
+B Z
+A X
+B Y
+B X
+A Y
+A X
+A X
+B Y
+B Y
+A Y
+B X
+A X
+C Y
+A X
+C X
+A X
+A X
+A X
+A X
+A X
+C Z
+C X
+A Z
+C Z
+A X
+A Y
+B X
+C X
+B X
+B Y
+C X
+B X
+A X
+A X
+A X
+A Y
+B X
+B Y
+A X
+C X
+A X
+A X
+A X
+A X
+C Y
+A Z
+C X
+A X
+A Y
+B X
+A Y
+A X
+A Y
+A X
+A X
+A X
+A X
+A Y
+A X
+B X
+A X
+A X
+C Y
+C Y
+A X
+C X
+A X
+A X
+C X
+C X
+B Z
+B X
+B X
+A X
+A Y
+B Y
+A X
+A X
+C X
+C X
+C X
+B X
+C X
+B Y
+A X
+B Y
+B X
+B X
+A X
+B Y
+A Y
+C X
+B X
+C X
+A Y
+B X
+C X
+A X
+C X
+A X
+B Y
+A X
+A X
+B Z
+C X
+B X
+C X
+B X
+A X
+A X
+A X
+A X
+A X
+C X
+C X
+A X
+A Z
+A Y
+A X
+A X
+A X
+A X
+C Y
+C Y
+B Z
+A X
+A X
+B X
+B X
+A Y
+A X
+B Y
+A X
+B Y
+A X
+C Y
+C X
+A Y
+B Y
+C X
+A X
+A X
+A X
+A Y
+A X
+A X
+A X
+B Y
+B X
+C X
+C Y
+A Y
+A Z
+B X
+C X
+B X
+C X
+A X
+B Z
+B Y
+A X
+C X
+A Y
+B X
+B X
+A Y
+A X
+A X
+A Y
+A X
+B X
+A X
+A X
+C Y
+C Y
+A Y
+A Y
+B Y
+B Y
+B Y
+B X
+A X
+A Y
+B Y
+B X
+A Y
+A X
+A Y
+C X
+C X
+B Y
+A Y
+B Y
+A Y
+A X
+B Y
+B X
+C X
+A X
+A X
+A X
+B Y
+B X
+A X
+B Y
+A Y
+A X
+C X
+A X
+B Y
+A X
+A X
+B Y
+A Y
+A X
+C Y
+B Z
+A Y
+C X
+A Y
+A X
+B Y
+A X
+B Y
+B Y
+B X
+B X
+A X
+A X
+C X
+B Y
+B X
+C X
+B Y
+A X
+A X
+A X
+A X
+B Y
+C X
+B X
+A X
+A X
+A Y
+C Y
+A Y
+B X
+A X
+B X
+A X
+A Y
+B Y
+A X
+C X
+C X
+A Y
+B X
+C Y
+A Y
+B X
+A X
+A Y
+C X
+A X
+A X
+B Y
+A Y
+B X
+B Y
+B Y
+A X
+A X
+A X
+B Y
+A Y
+A X
+B X
+A Y
+A Y
+B X
+C Y
+A X
+A Y
+A X
+B X
+A X
+B X
+C Z
+A X
+A X
+B Y
+A X
+A X
+A X
+C Z
+C X
+A Z
+C Y
+B X
+A Y
+B X
+A X
+A Y
+A X
+C X
+A X
+A X
+C Y
+A Z
+C Y
+B Y
+B X
+B X
+A Y
+C X
+B X
+A Z
+A X
+A Z
+C X
+A X
+C Z
+C X
+B Z
+C Y
+B Y
+A X
+B Y
+A X
+A X
+C X
+B X
+A X
+C Z
+B Y
+B Y
+A Y
+B Y
+A X
+A X
+B Y
+A X
+A X
+C Y
+C X
+A X
+C Y
+C X
+B X
+B X
+A X
+B Y
+A Y
+A X
+B Y
+B Y
+B X
+B X
+A X
+B X
+B X
+B Y
+B Y
+C X
+B X
+B X
+A X
+A X
+A X
+A X
+A Y
+C Y
+A X
+A Y
+C Z
+A Y
+C X
+A X
+C Y
+A X
+A X
+A Y
+A Z
+A Y
+A Y
+A X
+A Y
+A Z
+C X
+C Z
+B X
+A X
+A X
+B X
+A X
+A X
+A X
+C X
+A X
+A Y
+A X
+A X
+A Y
+C Z
+C X
+A X
+A X
+A Z
+A X
+C X
+A Y
+C X
+A Y
+C X
+C X
+A X
+A X
+A Y
+B Y
+C X
+C X
+B X
+B Z
+B X
+B X
+A X
+C X
+A Y
+C X
+A Z
+B X
+B Y
+A Y
+A Y
+A X
+A Y
+A X
+A X
+A Y
+A X
+A X
+B Z
+A X
+A X
+A X
+B Y
+B Y
+C Z
+A Y
+A Y
+B Y
+A X
+B X
+C X
+C Y
+C X
+B X
+C X
+A Y
+A X
+A X
+B X
+C X
+B X
+A Y
+B X
+B Z
+A Y
+A X
+A Y
+B X
+B Z
+A X
+A X
+C X
+A X
+A Y
+A X
+B X
+A X
+A X
+A Z
+B X
+B Y
+C Y
+C X
+A Y
+A X
+B Y
+C X
+A X
+C Y
+A X
+A Y
+A Y
+A X
+A X
+C X
+C X
+A Y
+A Y
+C X
+A X
+B X
+C X
+B Y
+C Y
+C X
+B X
+B Y
+C X
+B X
+B Y
+A X
+A X
+B X
+A Y
+A X
+B X
+A X
+C Y
+A X
+B X
+A Y
+C Y
+A X
+A Y
+A Z
+C Z
+A X
+A X
+C X
+A X
+B X
+A X
+C X
+C X
+A Y
+A X
+C Y
+A Y
+A X
+B Y
+A X
+A Y
+A X
+C Z
+C Z
+C X
+A X
+A X
+A X
+A X
+C X
+A X
+C X
+B X
+B X
+A X
+A Y
+B Y
+B X
+B X
+A Y
+A Y
+A X
+A X
+B Y
+B X
+A X
+C X
+B X
+C X
+B Y
+B Z
+B Y
+A X
+A X
+A X
+A X
+A X
+B Y
+A X
+C X
+B Z
+A X
+C Y
+A X
+B X
+C Y
+A X
+A Y
+B X
+A X
+B Y
+B X
+A Y
+C Y
+C X
+A Y
+A X
+A X
+A X
+C X
+B X
+C X
+A Y
+A X
+A Y
+C Z
+C X
+A X
+A Y
+B X
+B X
+B X
+B X
+A X
+B X
+A Z
+B Y
+A X
+A X
+A X
+C Z
+A Y
+A Y
+C X
+C X
+C Y
+B Y
+A Y
+A X
+A X
+C Y
+A X
+C X
+A X
+A X
+C Y
+A Y
+A X
+C X
+A X
+A Y
+C X
+A Y
+A X
+A X
+A X
+B X
+B X
+A X
+B Y
+C Y
+C X
+A Y
+B X
+B X
+B Z
+C X
+B Y
+A Y
+C Z
+B X
+C X
+A X
+A Y
+B Y
+B X
+C Z
+B X
+A X
+C X
+C X
+A X
+A X
+A Y
+B Y
+B X
+A Y
+C Y
+B Y
+B Y
+A X
+A Y
+A X
+B X
+A Y
+A X
+A Y
+A X
+B Z
+B X
+A X
+A Y
+A X
+B Y
+A Y
+A X
+A X
+C X
+A X
+A X
+A X
+A X
+B Y
+B X
+A X
+A X
+C Y
+C X
+A Y
+A X
+B X
+A X
+B X
+B X
+B Y
+A X
+B X
+B Y
+A X
+B X
+C X
+A X
+A X
+C Z
+A X
+B X
+A X
+B X
+B X
+B Y
+A X
+B Y
+C Y
+A X
+C X
+A X
+B X
+B Y
+A X
+C X
+B X
+A X
+C Y
+C X
+B X
+A X
+B X
+A Z
+C Y
+A X
+A X
+B X
+A Y
+B X
+A X
+A Y
+B X
+A X
+C Y
+A X
+C X
+B X
+A X
+C Y
+C X
+A X
+B Y
+B X
+A Y
+B X
+A X
+B X
+A Y
+B X
+A X
+A X
+C X
+A X
+A X
+A X
+A X
+C X
+C X
+B X
+B Y
+B X
+B Z
+A X
+B X
+B Y
+B X
+B X
+A X
+A Z
+A Z
+A X
+B Y
+A X
+B X
+B Y
+A X
+B Y
+B X
+A X
+C X
+C Y
+A X
+A X
+B X
+B X
+B Y
+A X
+C X
+B Y
+A X
+A Z
+A X
+C Y
+A Y
+B X
+C X
+C X
+A X
+B X
+C X
+A Z
+A X
+A X
+B Y
+C X
+A X
+A Y
+C Z
+B X
+A Y
+A X
+A Z
+C Y
+A X
+C X
+A X
+C Y
+B X
+A X
+A X
+B Y
+A X
+B X
+B X
+B X
+C X
+C X
+A X
+C Z
+A X
+C Y
+A X
+C Y
+A Y
+B Y
+B X
+B Y
+B X
+C Y
+B Y
+B Y
+B X
+B Y
+A Y
+A Y
+C Z
+A X
+A X
+A X
+A Z
+B X
+B Y
+B X
+B Y
+A X
+C X
+B X
+A X
+C Y
+B X
+C X
+C Y
+B Y
+A X
+B Y
+B X
+C X
+B X
+C X
+B X
+A X
+C X
+B Z
+B Z
+C X
+A Y
+B X
+A Y
+A X
+B X
+C Y
+C X
+A Y
+C Y
+B Z
+B Y
+B Y
+B Y
+B Z
+B Y
+A X
+A X
+A Y
+B Y
+B Y
+A X
+A Z
+C X
+A X
+A Y
+C X
+A Y
+A X
+B X
+A X
+A X
+C X
+A X
+A X
+C Y
+B Y
+A Y
+A X
+A X
+B Y
+A X
+B X
+A X
+A X
+B X
+B X
+A X
+B Y
+A X
+A Y
+B Y
+A Y
+A X
+C X
+A Y
+A X
+C X
+A X
+A X
+B X
+C Y
+C Y
+B X
+B Z
+A X
+A Y
+A X
+A X
+C Z
+A X
+B X
+A Z
+A X
+A X
+A X
+A X
+A X
+A X
+C X
+B X
+B X
+C X
+A X
+A X
+A X
+A X
+A X
+A X
+B X
+A X
+C X
+A Y
+A X
+A X
+A X
+A X
+B X
+B Y
+A Y
+A X
+A X
+C X
+C X
+A X
+A X
+C X
+A X
+A X
+A X
+A X
+A X
+A X
+C X
+A X
+A X
+A X
+A X
+B X
+A X
+A X
+B Y
+C Y
+A X
+A Y
+C Y
+A X
+B X
+B X
+A X
+A X
+A X
+B X
+A X
+A X
+A X
+A Y
+A X
+B Y
+A Y
+A X
+A Y
+A X
+C X
+A X
+C Y
+B X
+B X
+A X
+A X
+A X
+A X
+A X
+C Y
+A Z
+A X
+B X
+B X
+A X
+A X
+C Z
+A X
+B Z
+B Y
+C Y
+A X
+A X
+C X
+B X
+B X
+B X
+C X
+A X
+A Y
+B Y
+C X
+A X
+B Y
+A X
+C Z
+B X
+A Y
+A X
+A X
+C Y
+A X
+A X
+C X
+A X
+B X
+B Y
+B Y
+B X
+A X
+A Y
+C X
+A X
+A X
+A X
+B X
+C X
+B Y
+A X
+A X
+A Y
+A X
+A X
+B X
+C X
+C X
+A Y
+B X
+A X
+A X
+A X
+B Y
+A X
+B X
+A X
+A X
+A X
+A Y
+A X
+A Z
+C X
+B Y
+B X
+A X
+B X
+C X
+A X
+A X
+B X
+A X
+A X
+A X
+A X
+B X
+A X
+C X
+A Y
+B X
+C X
+A X
+B X
+A X
+B Y
+A X
+C Y
+A X
+C Y
+C X
+B Y
+A Y
+A X
+A X
+B X
+A X
+C X
+A X
+A Z
+B X
+A X
+A X
+A Y
+A X
+A X
+C X
+B Y
+C Z
+A X
+A Y
+B X
+B X
+A X
+B Y
+C X
+A X
+B X
+A Y
+B X
+A X
+A Y
+A X
+A X
+C Y
+B X
+A Y
+C X
+C X
+A Y
+A Y
+A X
+B Z
+A Y
+C X
+C X
+C Y
+A Y
+B X
+B Z
+A X
+B Y
+A X
+A X
+B X
+A Y
+C X
+C Y
+A X
+B Y
+A Y
+A X
+B Z
+B Y
+A X
+B X
+A X
+A X
+B Y
+A Y
+A X
+A X
+A X
+A Y
+A X
+A X
+C X
+A X
+A X
+C X
+A X
+A X
+C Z
+B X
+A Y
+A X
+B Y
+B X
+A X
+A X
+A X
+C Y
+C Y
+B Y
+A X
+C X
+C X
+B X
+A X
+A X
+A X
+A Y
+A X
+A X
+B Z
+C X
+A X
+A X
+A X
+B Y
+B X
+C X
+B X
+A X
+B X
+A X
+C X
+A X
+C X
+A X
+C X
+B Y
+B X
+A X
+A X
+B Y
+B X
+B X
+A X
+B X
+C Y
+A X
+A Y
+A Y
+A Y
+A Z
+B Y
+A X
+A X
+A X
+A X
+A Z
+A X
+A X
+A X
+B Z
+B Y
+C Y
+A X
+A X
+B X
+C X
+A Y
+A X
+B X
+A X
+A X
+B X
+B Y
+A X
+B X
+C X
+B X
+A X
+A X
+A X
+A X
+B X
+B X
+C Y
+B X
+B X
+A X
+B X
+A X
+B Y
+B X
+A X
+A X
+A Y
+B X
+A X
+B Y
+A Y
+B Y
+B X
+A Z
+A X
+B Y
+A X
+B X
+A X
+A X
+A X
+B Y
+B X
+A X
+C Z
+A Y
+A Y
+C X
+B Z
+B X
+C Z
+B X
+B X
+A X
+A X
+B Y
+C X
+A X
+A Z
+B X
+A X
+A X
+B Y
+A X
+A X
+A X
+B Y
+A X
+C Y
+A X
+C Y
+A X
+C Y
+B X
+A Y
+A X
+B X
+A X
+B Y
+A X
+B X
+B X
+A Z
+A X
+C Y
+B Y
+A X
+A X
+C X
+B Y
+C Y
+C X
+A Y
+B Y
+A Y
+A Y
+B X
+A X
+A X
+A X
+A X
+A Y
+A X
+A X
+A X
+B Y
+A X
+A Y
+C X
+A X
+B X
+A X
+A X
+A X
+C Z
+A X
+A Y
+A X
+C Z
+B Y
+B X
+A X
+A Z
+A X
+A X
+A Y
+A X
+A X
+A X
+B Y
+A X
+B X
+A X
+A X
+A X
+A X
+B X
+B Z
+C X
+C X
+C X
+B Y
+A X
+B Y
+B X
+A Y
+B X
+B X
+A X
+C Y
+B X
+A X
+A X
+A X
+A X
+A X
+A X
+B Y
+C Y
+B X
+C Y
+B Y
+C X
+A Y
+C X
+B X
+C X
+B X
+A X
+A X
+B Y
+A X
+C X
+A Y
+C X
+C X
+B Y
+A X
+C X
+C X
+B Z
+A X
+C X
+A Y
+B Y
+A X
+A Y
+A X
+B X
+A X
+A X
+B Y
+A Z
+A X
+B Y
+B X
+A X
+A Y
+B X
+B X
+A X
+A X
+A Y
+A X
+C X
+A X
+B X
+C X
+C X
+C Y
+A X
+B X
+B Y
+A X
+C X
+A X
+B Y
+A X
+B X
+B Z
+A X
+A X
+A X
+B X
+C X
+C X
+B X
+A Y
+A X
+A Y
+A X
+A X
+A X
+A X
+C Y
+B X
+A X
+A X
+A X
+B Y
+A X
+B X
+B Y
+A Z
+A Y
+A X
+A Y
+A X
+A Y
+B Z
+A X
+B Y
+B Z
+B X
+A X
+C X
+C Y
+A X
+A X
+A X
+B X
+A Y
+C X
+A X
+B Y
+A Y
+B X
+B X
+A X
+A Y
+B X
+A Y
+C X
+A X
+C X
+A X
+C X
+A X
+A X
+C X
+A X
+A X
+A Y
+B X
+C X
+B Y
+A Y
+A X
+A X
+A X
+A Z
+B Y
+A X
+A X
+B Y
+A Y
+B Y
+A X
+B Y
+B X
+A X
+A X
+A X
+B X
+B Y
+A X
+C Z
+B Z
+A X
+A X
+A X
+B X
+B Y
+A X
+B Z
+A X
+A Y
+A Y
+A Y
+C X
+B Y
+A X
+A X
+C Y
+B X
+A Y
+A X
+A X
+B Y
+C X
+C X
+C X
+A X
+A X
+A X
+B Z
+A X
+C X
+A X
+A X
+B X
+B X
+A X
+C Y
+A X
+B X
+C X
+B Y
+A X
+B Y
+C X
+A X
+C X
+B Y
+A X
+A Y
+C X
+C Z
+A X
+C X
+A X
+A X
+C X
+A Y
+C X
+B Y
+A X
+C Z
+A X
+B X
+B Y
+A Y
+A X
+A X
+A X
+A X
+A Y
+A Y
+B X
+C X
+A Y
+A X
+C X
+B X
+B Y
+C X
+B X
+A X
+B X
+A X
+C Y
+A X
+A X
+A X
+A X
+C X
+A X
+B X
+A X
+B X
+A X
+A Y
+C X
+C Y
+C X
+A Z
+B X
+A Z
+A X
+B Y
+A Y
+B X
+A X
+B Y
+A Y
+A X
+B Y
+A X
+B X
+A X
+A X
+A X
+A X
+B Y
+A Y
+A X
+A X
+B X
+B Z
+A Y
+A Y
+C Y
+C Y
+A X
+C X
+A X
+B Y
+B X
+B Y
+B X
+C X
+B X
+C X
+A X
+B Y
+A X
+B X
+A X
+B X
+C Y
+B X
+A X
+A Y
+A X
+B Y
+C X
+C X
+A X
+B Z
+A X
+A X
+B Y
+A X
+A X
+B X
+A Y
+C X
+A X
+C Y
+A Y
+C X
+A Y
+A X
+A X
+A X
+A Y
+B X
+B X
+A Y
+C X
+B Y
+A Y
+B X
+B X
+B X
+B X
+A X
+B X
+B X
+A X
+C X
+A X
+C X
+C X
+A X
+C X
+B X
+A Y
+A Z
+A X
+A X
+A X
+A Y
+A X
+A X
+C Z
+A X
+B X
+C X
+A X
+B X
+C X
+C X
+A X
+B Y
+A X
+A X
+A X
+A Y
+B Y
+B Y
+A X
+B X
+A X
+C X
+A X
+B Y
+C Y
+C X
+C X
+B X
+B X
+C X
+A Y
+B X
+A X
+A X
+A X
+A X
+A Y
+B X
+B X
+C Y
+C Y
+B Y
+B X
+A X
+C Y
+A X
+C Z
+C X
+A X
+B Z
+A X
+A Z
+C X
+B Y
+A X
+A Y
+A X
+B X
+A Y
+C X
+C Y
+B X
+B X
+B Y
+B Y
+C X
+B Y
+B Y
+B X
+C X
+C X
+A X
+A X
+A Y
+A X
+A Y
+B X
+A X
+B Y
+B X
+A X
+A X
+A Y
+B X
+B X
+A X
+B X
+C Y
+A Y
+B Y
+C Y
+B Y
+A X
+B Y
+B X
+B Z
+A Y
+A Y
+C Y
+B X
+A X
+A X
+B Y
+A X
+A X
+B X
+A X
+A X
+A X
+B X
+B X
+B Y
+A X
+C X
+A X
+B X
+A X
+A X
+A Y
+B X
+B X
+B X
+C X
+B Y
+C Z
+A X
+C X
+A X
+B X
+A X
+A Y
+B Y
+A Z
+A X
+C X
+A Y
+A X
+A X
+A X
+A X
+A Y
+A X
+C X
+A X
+C Y
+B X
+A X
+A X
+A X
+A X
+A X
+C X
+A X
+B X
+B Y
+B Y
+B X
+C Z
+C X
+B X
+C Y
+A X
+A X
+A X
+A X
+A X
+C X
+A X
+B X
+C X
+C X
+A X
+A X
+B X
+A X
+A X
+A X
+B X
+A X
+C X
+A X
+A Y
+A X
+B Y
+A X
+B X
+A Y
+C X
+B X
+C Y
+C Y
+B X
+A X
+B X
+C X
+A X
+C X
+A X
+C X
+B X
+B X
+C X
+C X
+B X
+B X
+C Y
+B X
+A X
+B X
+B X
+B Y
+A Y
+B X
+A X
+C Y
+A Y
+C Y
+A X
+B Y
+A X
+A X
+A X
+B Y
+B X
+A Y
+A X
+A X
+A Y
+B X
+B Y
+A Y
+B X
+C X
+C Z
+B X
+A Y
+A X
+C X
+A X
+C X
+B Z
+C X
+A Y
+A X
+C X
+B Y
+A Z
+B Y
+A X
+A X
+A Y
+C X
+A Z
+A X
+B Y
+A X
+B X
+A Y
+A Y
+A X
+A X
+A X
+C Y
+B X
+A X
+B X
+B Y
+B Y
+A X
+A X
+A Y
+A X
+C X
+B X
+C X
+B X
+B X
+C Y
+A Y
+B X
+A X
+A X
+A X
+C X
+C X
+A X
+B X
+A X
+A X
+A Z
+A X
+C X
+B X
+A X
+C Y
+A Y
+C Y
+B Y
+B Y
+B Z
+A X
+C X
+A X
+B Y
+B Y
+A X
+B Y
+A X
+B Y
+B X
+B X
+C X
+B Y
+B X
+A X
+A Y
+B X
+A X
+B Z
+A Y
+B X
+B X
+A Y
+C Y
+B X
+B Y
+A X
+B X
+A Y
+A Y
+B X
+B Y
+B X
+A X
+C X
+A X
+A X
+A X
+B Y
+A Y
+B X
+C X
+C Z
+A X
+B Y
+A Y
+A X
+B X
+A X
+A Y
+A X
+A Y
+A X
+A X
+A X
+C X
+A Y
+C Y
+A X
+A X
+C Z
+B X
+A Y
+B X
+B X
+B X
+B X
+B X
+A X
+A X
+B X
+B Y
+A X
+C Y
+C X
+A X
+A X
+A X
+A X
+A X
+A X
+A X
+A Y
+B Y
+A X
+A X
+A Z
+C Y
+C Y
+B X
+C Z
+A X
+A X
+A X
+B Z
+B Y
+A X
+A X
+A X
+B X
+A X
+C X
+C X
+C X
+B X
+A X
+A X
+C Z
+B Z
+C Y
+A X
+A X
+A X
+C Z
+A X
+A X
+C X
+C X
+A X
+C Y
+A X
+A Y
+A X
+A X
+A Z
+C X
+C X
+A Y
+B X
+B X
+A Y
+A X
+B X
+C Y
+A X
+A Y
+B Z
+A X
+C Y
+A X
+B Y
+A X
+A Y
+A X
+C Z
+A X
+B X
+A X
+B Y
+A X
+A X
+A X
+A X
+A X
+B Y
+C X
+A X
+B X
+A X
+A Y
+A Z
+A X
+A X
+B Y
+B X
+C X
+A X
+A X
+B X
+B Y
+B Y
+A Y
+B Z
+B Y
+A X
+A X
+A X
+A X
+B X
+C Y
+A X
+A X
+A X
+A X
+A X
+A X
+A X
+A X
+B Y
+A X
+B X
+C X
+C X
+C X
+C X
+A X
+B Y
+A X
+B X
+B X
+A X
+A X
+C Z
+A X
+B X
+B X
+C X
+A X
+B X
+B X
+B X
+B X
+B Y
+A X
+B X
+A Y
+A X
+A Y
+B Y
+A X
+C Y
+B X
+A X
+A X
+A X
+A Z
+A Y
+A X
+C X
+C X
+B X
+A X
+A X
+B X
+A X
+A Y
+C Z
+A Y
+B X
+B Y
+A X
+C Y
+B Z
diff --git a/2022/day02/main.rs b/2022/day02/main.rs
@@ -0,0 +1,79 @@
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+enum Shape {
+ Rock = 1,
+ Paper = 2,
+ Scissors = 3,
+}
+
+#[derive(Clone, Copy)]
+enum Outcome {
+ Win = 6,
+ Draw = 3,
+ Lose = 0,
+}
+
+impl Shape {
+ fn from_str(s: &str) -> Option<Self> {
+ match s {
+ "A" | "X" => Some(Self::Rock),
+ "B" | "Y" => Some(Self::Paper),
+ "C" | "Z" => Some(Self::Scissors),
+ _ => None,
+ }
+ }
+
+ fn winning_shape(&self) -> Self {
+ match self {
+ Self::Rock => Self::Paper,
+ Self::Paper => Self::Scissors,
+ Self::Scissors => Self::Rock,
+ }
+ }
+
+ fn losing_shape(&self) -> Self {
+ match self {
+ Self::Rock => Self::Scissors,
+ Self::Paper => Self::Rock,
+ Self::Scissors => Self::Paper,
+ }
+ }
+
+ fn get_outcome(&self, other: &Self) -> Outcome {
+ if self == &other.winning_shape() {
+ Outcome::Win
+ } else if self == &other.losing_shape() {
+ Outcome::Lose
+ } else {
+ Outcome::Draw
+ }
+ }
+}
+
+fn main() {
+ let input = std::fs::read_to_string("input.txt")
+ .unwrap()
+ .trim()
+ .split("\n")
+ .map(|x| x.split(' ').map(|x| Shape::from_str(x).unwrap()).collect())
+ .collect::<Vec<Vec<Shape>>>();
+ // 11150
+ println!("Part 1: {}", part_1(&input));
+ // 8295
+ println!("Part 2: {}", part_2(&input));
+}
+
+fn part_1(input: &Vec<Vec<Shape>>) -> i32 {
+ (0..input.len())
+ .map(|i| input[i][1] as i32 + input[i][1].get_outcome(&input[i][0]) as i32)
+ .sum()
+}
+
+fn part_2(input: &Vec<Vec<Shape>>) -> i32 {
+ (0..input.len())
+ .map(|i| match input[i][1] {
+ Shape::Rock => Outcome::Lose as i32 + input[i][0].losing_shape() as i32,
+ Shape::Paper => Outcome::Draw as i32 + input[i][0] as i32,
+ Shape::Scissors => Outcome::Win as i32 + input[i][0].winning_shape() as i32,
+ })
+ .sum()
+}