diff options
| author | omagdy7 <omar.professional8777@gmail.com> | 2023-04-09 03:17:14 +0200 |
|---|---|---|
| committer | omagdy7 <omar.professional8777@gmail.com> | 2023-04-09 03:17:14 +0200 |
| commit | 2ee707c5e1ef6d41acd2163f332fcd38c07e9be0 (patch) | |
| tree | fa2ce8fb20167d79e738233bea851c6dcbc7091c /2022/Rust/src | |
| parent | 05c20dd5c02dd317afec8c96df331960f1814270 (diff) | |
| download | aoc-2ee707c5e1ef6d41acd2163f332fcd38c07e9be0.tar.xz aoc-2ee707c5e1ef6d41acd2163f332fcd38c07e9be0.zip | |
Added the solution for day2 in rust and added some test files
Diffstat (limited to '2022/Rust/src')
| -rwxr-xr-x | 2022/Rust/src/day2.rs | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/2022/Rust/src/day2.rs b/2022/Rust/src/day2.rs index 8b13789..adfcb96 100755 --- a/2022/Rust/src/day2.rs +++ b/2022/Rust/src/day2.rs @@ -1 +1,117 @@ +// A -> Rock +// B -> Paper +// C -> Scissors +// D -> Rock +#[derive(Debug)] +enum Hand { + Rock(u32), + Paper(u32), + Scissors(u32), +} + +impl From<&str> for Hand { + fn from(s: &str) -> Self { + match s { + "A" | "X" => Hand::Rock(1), + "B" | "Y" => Hand::Paper(2), + "C" | "Z" => Hand::Scissors(3), + _ => panic!("Should've been a valid hand"), + } + } +} + +fn solve_part_one(data: &str) -> u32 { + let mut score = 0; + for line in data.lines() { + let (h1, h2) = line.split_once(" ").unwrap(); + match Hand::from(h1) { + Hand::Rock(_) => match Hand::from(h2) { + Hand::Rock(x) => { + score += x + 3; + } + Hand::Paper(x) => { + score += x + 6; + } + Hand::Scissors(x) => { + score += x; + } + }, + Hand::Paper(_) => match Hand::from(h2) { + Hand::Rock(x) => { + score += x; + } + Hand::Paper(x) => { + score += x + 3; + } + Hand::Scissors(x) => { + score += x + 6; + } + }, + Hand::Scissors(_) => match Hand::from(h2) { + Hand::Rock(x) => { + score += x + 6; + } + Hand::Paper(x) => { + score += x; + } + Hand::Scissors(x) => { + score += x + 3; + } + }, + } + } + score +} + +fn solve_part_two(data: &str) -> u32 { + let mut score = 0; + for line in data.lines() { + let (h1, h2) = line.split_once(" ").unwrap(); + match Hand::from(h2) { + Hand::Rock(_) => match Hand::from(h1) { + Hand::Rock(_) => { + score += 3; + } + Hand::Paper(_) => { + score += 1; + } + Hand::Scissors(_) => { + score += 2; + } + }, + Hand::Paper(_) => match Hand::from(h1) { + Hand::Rock(x) => { + score += x + 3; + } + Hand::Paper(x) => { + score += x + 3; + } + Hand::Scissors(x) => { + score += x + 3; + } + }, + Hand::Scissors(_) => match Hand::from(h1) { + Hand::Rock(_) => { + score += 2 + 6; + } + Hand::Paper(_) => { + score += 3 + 6; + } + Hand::Scissors(_) => { + score += 1 + 6; + } + }, + } + } + score +} + +fn main() { + let data_test = include_str!("../input/day2.test"); + let data_prod = include_str!("../input/day2.prod"); + println!("{}", solve_part_one(data_test)); + println!("{}", solve_part_one(data_prod)); + println!("{}", solve_part_two(data_test)); + println!("{}", solve_part_two(data_prod)); +} |
