diff --git a/inputs/day2.txt b/inputs/day2.txt new file mode 100644 index 0000000..79dbbc9 --- /dev/null +++ b/inputs/day2.txt @@ -0,0 +1,2500 @@ +C Y +C Z +B Z +A Z +A Z +A Y +A Z +C Y +C Z +A Y +A Y +B X +A Y +C Z +C Z +B X +C Z +A Z +B Y +C Z +A Y +C X +B Y +A Z +B Y +C Z +B Z +B Y +C Z +A Z +A Z +B Z +C Z +A X +B X +C Y +C Z +C Z +C Z +A Y +C Z +C Z +C Z +C X +A Z +A Z +C Y +A Z +C Z +C Z +C Z +A Z +B Y +C Z +A Z +B Z +A Z +A Y +B X +B X +C Z +C X +C Z +C Z +A Z +B Z +B X +B X +B Y +C X +C Y +A Y +C Z +A Y +C Z +A X +B X +B X +C X +B X +B X +A Y +B Y +C Y +A Z +C Y +B Y +B X +B X +B Z +B X +B Z +A Z +B Y +C Z +B Z +B Z +B Y +A Y +C Z +A Z +C Y +C Z +B Z +C Z +C Z +B Y +A Z +C Z +C Z +A Z +A Z +B X +C Y +A Y +C Z +B Y +C Z +A Y +C X +C X +B Y +C Z +C X +C Z +B Y +A Y +B Z +C Z +B Y +C Y +C Z +C Z +B Z +C Z +A Z +A Y +C Z +C Z +B Y +A Z +C Z +C Z +C Y +B Y +C Z +C Z +C Z +C Z +A X +B Y +C Z +B Y +C Z +B Y +C X +C Y +A X +C Z +B X +B X +A Z +A Z +A Z +B Y +C Z +B Z +A Z +B Y +C Y +C Z +C Z +C Z +C Y +C Z +B Y +C Z +C Z +B Z +A Y +B Z +C Z +C Y +A Z +C X +B Z +C Y +B Y +C Z +C Z +A Z +C Y +C Y +C Y +B Y +C Z +C X +B Y +C Z +C Y +B Z +A Y +C Z +A Y +B Z +A Y +A Y +B Z +A Z +C Z +C Z +B X +C Z +C Z +B X +B Y +C Z +C X +A X +C Z +C Z +C Z +B X +B X +A Z +C Z +C X +A Z +C Z +C Z +A Z +B Z +C Z +B Y +C Z +A Y +B Z +C Z +C Z +C Z +C X +A X +A Y +B Y +C Z +B Y +C X +A Y +C Z +C Z +B Y +B Z +C Z +B Y +B Y +B Y +A Y +C Z +B Z +A X +B Y +C Z +C Z +C X +A Y +C Z +A X +B Y +A X +A Z +B X +B X +C Z +C Z +A X +C Z +A Y +B Y +B Z +C X +C Y +B X +C Z +C Y +B Y +C Z +C X +B Z +C Z +C Z +C X +C Y +C Z +A Y +C Z +C Z +C Z +C Z +C Z +C Y +B Y +C Z +A X +A Z +C Y +B Z +B X +A Z +C Z +C Y +C Z +C X +A Y +C Z +A Z +B Y +B Z +C Z +B Z +A Y +C Z +B Y +C Z +C Y +C Z +C X +A Y +A Y +C Y +C Z +C Z +B Y +A Z +C Z +C Y +A Y +A Z +A Z +C X +C Z +B X +C Y +C Z +C Z +B Y +C Z +B X +C Z +B Z +B Y +C X +C X +A X +B Y +A Z +C X +B X +A Z +C Z +C Z +A X +A Y +B X +C Z +A X +C Z +B Y +C Z +A Y +B Y +C Z +B Z +B Y +A Z +C Z +A X +B Z +C Y +B Z +B Y +A Z +A Y +A Z +A X +C X +A X +C Y +C Z +A Y +C Y +B X +A X +A Y +C Y +B Y +C Z +C Z +B Z +C Z +C Z +C Z +C Z +C Z +C Z +C Z +B Y +C Z +A Y +B Y +C Y +C X +C Z +B Z +B Y +C Y +C Z +A Z +C Y +B Z +C Z +A Z +C X +B Y +B Y +B Y +C Z +B Y +A Y +C Z +C Z +A Z +A Z +C Z +B Z +B Y +C Z +B Y +B Z +C Z +A X +A X +C X +C Y +A Y +C Z +A Y +A Z +C Z +C Z +C Z +B Y +A Z +B Z +C X +B X +C X +B Y +C Z +A Z +C Z +A X +B Z +B Z +B Y +A Y +C Z +B X +C Z +B Z +C X +A X +C Z +C Z +B Z +B Y +C Z +C Z +A Z +C Y +C Z +B Y +A Y +B Y +A Y +C Z +C Y +B Z +A Y +C Z +B X +B X +B X +C Y +C Z +A Y +C Z +C Z +C Z +A Y +C Z +B X +A Z +C Z +C Z +A Y +C Z +C Z +B X +C Z +B Y +A Z +C X +C Y +C Y +C Z +C Y +A Y +B Z +C Z +C Z +C Z +B Y +C Z +C Z +A Y +A X +A Y +C Y +C Z +C Z +A X +B Z +C Z +C Z +B Z +B Y +C Z +A X +C X +A Z +B Z +C Z +A X +C X +C Z +B Y +A X +A X +C Z +C Z +B X +C Z +B Z +B Y +A X +C Y +C Z +C X +A Y +B Y +C Z +C Z +C Z +C Z +B Z +A Y +C Z +C Z +B Z +C Y +B Z +B X +B Y +A Z +C Z +A Z +B Y +C Y +C Z +C Z +C Z +B Z +C Z +C X +C Z +B X +C Y +B Y +C Z +C Z +C Z +C Z +B Y +B Y +C Z +B Y +C X +B Z +A X +C X +C Z +B X +C Z +C X +C Z +A X +A Z +B X +C Z +C Z +B Y +C Z +A Y +C Z +C Z +C Y +C Z +A Z +A X +C X +B Y +A Y +B Y +A X +C Z +B Y +B Y +C Z +C Z +B Y +B X +A Y +C Z +B Y +C Y +C Z +C Z +C X +B Y +A Z +C Z +A Z +A X +C X +A Z +C Z +C Z +A X +B Z +C Z +B Y +A Z +A Y +A X +A Y +A X +C Z +A X +B Y +A Y +B Z +C Y +C Z +B Z +C X +A Y +A Y +C Z +C Y +C Z +B Y +B Y +B Y +B X +C Z +C X +B Y +C Z +C Z +B Y +C Z +C Z +B Y +C Z +C Y +C Z +C Y +C Z +C Y +A Y +A Y +C Y +C Y +C Y +C Y +C Z +C X +B Z +B Z +C X +C Z +B Y +B Y +A Z +C Y +C Z +C Z +C X +C Z +C Z +A Z +B Y +C Z +A Y +C Z +C Z +C Z +A Z +C X +C Y +B Y +A Z +B Z +C Z +B Y +C Z +B Z +C X +A X +C Y +A Y +B Z +B Y +A X +C Z +B Z +C Z +C Z +C X +B Z +C X +A Z +B Z +C Z +C Z +C Z +B Y +A X +C Z +C Y +C Y +C Z +A Z +C Z +C Z +A X +C Y +B Y +A Y +A Z +A Z +B Z +C Z +A Z +B Y +B Y +A Y +A Z +A Z +C Z +C Z +C Z +A X +C Z +B Z +B X +C Y +A Z +B Y +C Z +B Y +A X +C Z +A Z +C Z +B Z +C Y +C Z +B Y +A Z +B Z +A Y +B X +C Z +B Y +C Z +C Z +C X +C Y +C Z +B X +C X +A Y +A Y +C Z +C Y +B Y +C Y +C Y +C Z +A Y +A Z +B Y +C Z +C Z +A X +C Z +C Y +C Z +B X +C Y +A Z +A Y +A Z +C X +C Z +C Z +C Z +B Z +C Y +B Z +C Z +B Y +C Z +B Y +A Y +B X +C Z +A Y +C Z +A Y +A Z +A Z +B Z +A Y +C Z +A X +B Y +C Z +B Z +C Z +A Y +A Y +B Z +B X +B X +C Y +C Z +C Z +C Y +A X +B Z +C X +B Y +C X +B X +C X +C X +C Z +A Y +C Y +C Z +B Z +A Z +A Z +C Z +A Z +C Z +A Z +A X +B Y +A X +A Y +C X +B Y +C Z +A X +B X +C Z +C Z +C X +B X +A Z +B X +C Z +B Y +C Z +C X +C Z +C X +C Z +B Z +B Y +C Z +B X +C X +C Z +C Y +A Z +B Z +A X +B X +B X +C Z +B Z +C X +A Y +C Z +C Z +B Y +C X +C Z +A X +B Y +C Z +C Z +C Z +C Z +C Z +A X +A Z +C X +A Z +C Z +A Z +C Z +B Y +B Z +A X +C X +C Z +B Z +A Z +C Z +C Y +C Z +C Z +C X +A Y +B Y +C Z +A Y +C Z +B Z +C X +B Z +B Z +B X +B Z +C Y +C Z +C Y +B Y +C Y +C Z +C X +C X +A Z +B Y +C Z +A Y +B X +C Y +A Y +A Z +B Y +B Y +A Y +B Y +B Z +A X +C Z +B Y +A X +C Z +C Z +C X +B Y +A Z +A X +B Y +A Z +C Z +B Z +B Z +B Y +B Y +A Z +A Z +A Y +C Z +C Z +A Z +C Z +C Z +C Z +A X +C Z +A Y +C Y +A Z +C Z +B Y +C X +B Y +C Z +C Z +C Z +A Z +B Z +B X +C Z +C Z +A Y +B Z +B X +C Z +C Y +A Y +C Y +C Y +C Z +C Y +C X +C Y +B Z +B Y +C Z +A Z +A Y +C Z +C Z +B Y +B Y +A Z +A Z +A X +C Z +C Z +A Y +B Y +C X +C Z +C Z +A Z +C Z +B X +B Y +A Y +C Z +A X +A Y +C Z +B X +C X +B Z +C Y +C X +B Y +B Y +C Z +C Z +C X +C Z +A Y +A Z +C Y +C Z +A Z +C Z +C Y +A X +C X +C Z +B X +C Z +B X +C Z +C Z +C Z +B X +B Y +B Y +B Y +C X +B Y +C Z +C Y +C Z +C Z +B X +C Y +B Z +C Z +C Y +C X +C Z +A X +A Z +C Z +C Y +C X +C Z +B Y +C X +C Y +C Z +C X +A Z +B Y +B X +C X +C Y +B Z +C Z +C Y +B Z +C X +A Z +A Y +C Z +C Z +C X +B Y +C Y +C Z +A Z +B Z +B Y +B Y +B Z +C Z +A X +B Y +A Z +A Y +C Z +C Z +B Y +C Y +C Z +B Z +A Z +B Z +C Z +C Z +B Y +B X +C Z +C Y +C Z +A Y +C Z +A X +C X +B Y +B X +C X +C Z +C X +B Z +C Z +A Z +B Z +C Z +A X +C Z +C Z +A Y +B Y +B Z +B X +B Z +C X +B Y +C Z +C Z +C Z +A Z +C Z +C X +C X +B Y +C X +C X +C Z +C Z +A Z +C Y +C Z +C Z +B Z +C Z +A Y +B Y +C Z +C Z +B Y +B Y +C X +C Z +B X +A Y +B Z +A Y +A Y +A Y +C Y +C Y +C Z +B X +B Z +C Z +C X +C X +B Z +A Z +A X +B Y +C Z +B Z +A Z +B X +C Z +A Y +C Z +A Z +A Z +C Z +C X +C Z +C Y +A X +B Y +C Z +C Z +C Z +C Z +C Z +A Y +C X +C Z +A Y +B X +C Z +A Y +C Z +C Z +C Y +B Z +B X +C Z +A X +B Y +C Z +C Z +A X +A Y +C Z +C Y +B Y +C Z +C Z +A Y +A Y +A Y +A Y +C Z +A X +A Z +B Y +B Z +A Z +C Y +C Z +C Z +C Z +A Z +C Z +A Z +C Z +C Z +A Z +C Z +C Z +A Z +B X +C Z +A Y +B Y +C Z +A X +C Z +A Y +C Z +C Z +C Y +C Z +A X +B Y +C Z +A Z +C Z +A Z +A Z +B Y +C X +B Y +C X +C X +C Z +A Y +B Z +A Y +C Z +C Z +B Z +A Y +C Z +B Y +C Z +A X +C Z +C Z +C Z +B Z +A X +B Y +C Z +A X +C Z +C X +B Y +C Z +A Y +C Y +B Y +A Y +C Z +A X +B Y +A Y +A Z +C Z +C Z +C X +A Z +C Z +C Z +B Y +B X +A Z +C Z +B X +C Z +C Y +C Z +C Z +C Z +C Y +A Y +C Z +C Y +C Z +C Z +B Y +B Y +B X +C Y +B Z +C Z +B Y +C Z +C Z +C Z +A Z +A Y +C Y +C Z +C Z +A Z +C Z +C Z +C Z +B Y +B X +B Y +A Y +C Z +B Z +C Z +B Y +B Z +A Y +C Z +C Z +C Y +A Y +C Z +C Z +B Y +A Z +A Y +C Z +C Z +B Y +C Z +B Y +B Z +C X +C Y +C Z +A Y +C Z +A Z +A X +B X +C Z +C Y +C Z +C X +B X +B Y +B Y +C Z +C Z +C Z +A X +B Z +C Z +A Z +A Z +C Z +B Y +B X +B Y +C Z +B Z +C Z +B X +B Z +C Z +B X +A X +C Z +C X +B Z +C Y +C X +C Z +C X +A X +A X +C Z +C Z +C Z +B X +B X +C Z +C Z +C X +C X +C Z +A Y +B Y +B Y +B Y +C Z +C Y +C Z +C Z +C Z +B Y +C Y +C Z +B X +C Z +A X +C Y +A Y +C X +A Y +A Z +C Z +B Y +B Y +A Z +C Y +B Z +B Z +A X +B Y +C Z +B X +A Z +A Z +C Z +B Z +A Z +C X +B Z +C Z +C Z +C Z +C Z +B X +B Y +C Z +C Z +C X +C Y +A Z +B X +B Y +B Z +C Z +B Z +C Z +C Z +C Z +C Z +A Y +C X +C Z +A Y +C Z +C Z +B Z +C Z +A Z +C Z +A Y +C X +C Z +A X +C X +C Z +C Z +B Y +C Z +A Z +C X +C Z +B Y +A Y +B Y +C Z +B X +A X +C Z +B Y +C Z +B Y +A Z +A Z +C Z +A Z +B Y +C Z +C Y +B X +C Z +A Z +B Z +C Z +C Y +C Z +B Z +A X +A X +A Z +C Z +C Z +C Y +C X +C X +A X +C X +B X +C X +A Y +C Y +C Z +C Z +C Z +C Z +C X +A Y +C Y +A Y +B X +C Y +C Z +A X +A Z +C Z +C Z +B Y +C Z +B Z +C Z +C Z +A Y +A Y +C Z +C Z +A Z +C Z +C Z +B X +C Y +C Z +C Z +C Z +C Z +A X +B Y +B X +B Z +C Z +A Z +A Z +B Z +A Z +B X +C Z +B Z +C Z +A Z +C Z +C Z +A Y +B Y +C Y +B X +A Z +C X +C Z +C X +B Y +B Z +C Z +C Z +C Z +C Y +C Z +A X +A X +A Y +C X +C X +A Y +B Y +C X +C Z +C Z +B X +B Z +B X +C X +B X +A Y +C Z +A Z +C Z +C Z +C Z +C Z +C X +A Z +B Y +C Z +C X +A Y +A Y +C Z +C Z +B Z +B X +C Z +A Z +B Y +C Z +C Z +B Y +A Y +C Z +B Z +B Z +A Z +C X +C Z +B Z +C Z +C Z +B Y +C X +B Y +A Z +C Z +A X +C Z +B Y +C Z +A Z +B Z +C Z +A Z +A Y +C Y +B X +C Z +A Y +C Y +A X +A Z +A Y +C X +C Z +C Z +B Z +A Z +C Z +C Z +C Y +C X +C Y +B Y +C Z +B Y +C Y +C Y +C Y +A X +C Z +C Z +B X +B Y +C Z +A Y +C Z +A Y +B Z +C Z +C Z +C Z +A Y +A X +B Z +B Y +A Y +A Y +B Y +B Z +C X +A Y +B Y +C X +C Z +C Z +B Y +C Z +C X +C Z +C X +C Z +A Y +A Y +B Y +C Z +A Z +C Y +C Z +A X +C Y +C Y +C Y +A Z +C X +C Z +C Z +A Z +C Z +B Y +C Y +C Z +C Z +C Z +B Z +C X +C Z +C Z +C X +C Z +C Z +C X +C Z +C X +B Z +B X +A X +C Z +A Y +C Z +B X +C Y +A X +C X +B Z +C Z +A Y +A X +C X +B Z +B Z +C X +A Y +C Y +A Y +C Z +C Y +A X +C Z +A Y +A Z +C Z +B Y +C X +A Y +A Y +C Y +B Y +A Z +B Y +C X +A Y +B Z +B Z +C Z +C Y +C Z +B Y +C X +C Z +C Z +A Y +C Z +C X +A Y +C Z +C Z +B X +C Z +A X +C Z +A Y +C Y +A Y +B X +C Y +C Y +A Y +C Z +A Z +C Z +C Y +C Z +A Z +A Z +C Z +C Z +C Z +C Z +C Z +A Y +A Z +B Y +C Z +A Y +C Y +C Z +A Y +C X +C Z +A Z +C Z +C Y +C X +C Z +C Y +A X +B Y +C Z +A Y +A Z +C X +C X +C Z +A Z +C Z +C Z +C Z +C Z +A X +C Z +C Z +C X +C Z +A Y +C Z +C Z +B X +B Y +C Y +B Z +C Y +C Z +B Y +A Y +A Y +B Y +A Z +B Z +B Y +A X +C Z +B X +A Y +C X +C Z +C X +C Z +C Z +C X +A Z +B Y +A X +C Z +C Z +B Z +C X +C X +B Z +A Y +A Y +A Y +A Z +C Y +C Z +A X +B Y +C Z +B Y +B Y +C Y +C Z +C Y +B Y +C Z +B Z +C X +C X +A X +C Z +C Z +B Z +A Y +A Z +B X +B Z +B Y +C Z +A Z +C X +A Z +B Y +C Z +B Y +A Y +C Z +A Y +B Z +C Z +A Z +B Z +B Y +B Y +A X +B Y +B Y +C Z +B Y +C Z +B Z +A Z +A Y +C Z +B Y +C Z +C Z +C X +C X +C Y +B Y +C Y +A Z +C Z +A Z +C Z +B Z +C Y +C Z +A X +B X +A Z +A Y +A Y +C Z +C Z +C Z +C Y +C Z +C Z +A Z +A X +B X +A Z +C Y +C Z +B Y +A Y +A Y +B X +B X +C Z +C Z +C Z +C X +C Z +C Y +C Z +A Y +C Z +C Z +C Y +A Z +B Y +A Y +B Y +B Y +A Y +A Y +B Z +C Z +C X +B Y +C Z +C Z +C X +A Z +B Y +A Z +C Z +C Z +B Y +C X +C Z +C Y +A Y +C Z +A Y +B Y +A Y +C X +C Y +C Y +B Y +B Z +A Z +C Z +C Y +B Z +B Y +A Y +A Z +A Y +A Y +B X +C Z +A X +B Y +B Y +C Z +B Y +B Y +B Z +C Z +A Y +C X +A X +A Y +C X +A Y +A Z +C Z +B Y +B Y +B Y +C Y +A Y +B Z +C Z +C Z +B Z +C Z +B X +C Y +B Y +A Z +C X +A Z +C Z +B X +C Z +C Z +B Z +C Z +A Z +A Z +B Y +C Z +A Z +C Y +B Y +B Z +C Z +C X +C Z +A Z +C Z +C Y +C X +A Y +B Y +B X +C X +C Z +A Z +C X +B Z +C Z +A Y +C Y +C Z +A Z +C Z +A Z +C Y +C X +C Y +B Z +B Y +A Z +A Y +B X +A Z +C X +C Y +C X +C Z +C X +A X +C Z +B Y +C Z +A Y +B Z +C X +B Y +C Z +A Z +C Z +C Z +C Y +A Y +A Z +A Y +C X +B Z +A Z +C Z +C Z +C Z +A X +C Z +A Z +A Y +C X +B X +C Z +C Z +A X +A Y +C Z +C X +C Z +A Z +C Y +C Z +B Z +C Y +C X +A Y +A X +A Z +C Z +C Z +C Z +C Z +A Y +C Z +A Z +A Y +C Z +B Z +B Y +C X +C Z +C X +C Z +B X +A Y +C Z +B Z +A Z +A Z +B Z +B Z +C Z +C Z +B Y +C Z +A Y +C X +A X +A X +C X +C X +B Y +B X +A Y +C Z +B X +B Y +A Z +B Z +A Z +A Z +C X +C Z +A X +A Y +C X +C Y +C Y +C X +A Z +C Z +C X +C X +A Y +A X +C Z +C Z +B Y +B Z +C X +C X +C Z +B Z +B Z +B Z +B Z +B Y +B X +C Z +C Z +C Z +C X +C Z +C Z +B Y +C Z +C X +B Y +C Z +C Y +B Z +C Y +C Z +C Z +C Z +C Z +C Z +C Z +C Z +A X +A Y +C Y +C Z +A Y +B X +C Z +B Y +C Y +C Z +C Z +C Z +C Y +C Z +A Z +B Y +A Z +C Z +B Z +C X +C X +A Z +C Z +C X +C Z +B Z +C Z +C Y +B X +C Z +A Z +C X +B Y +B Y +C Z +C Z +C Z +B Y +C Z +B Y +A Y +B Z +B Z +B Y +C Z +B Z +A X +C Z +C Z +C Z +B Y +B Y +C Z +C Y +C Z +B Y +C Z +B X +B Z +C X +B Y +C Y +B Y +C Z +A Y +B Z +C X +B Y +A Z +C Z +C X +A Z +B Z +A Y +C Z +C X +B Y +C Z +C Z +B Y +B Z +C X +C X +C Z +C Z +C X +B Z +A Y +C Z +C X +A Z +C Z +C Z +C Z +C Y +B Z +A X +B Z +B Z +C Z +C Z +B Z +C Z +B Z +A X +B Z +B Y +B Z +B Z +B Y +C X +A Y +B Y +B X +B X +A X +C Z +C Y +C Y +C Y +C Y +B Y +A X +C Y +A X +C Z +B Z +C Z +C Y +B Y +A Z +C Y +A Z +B Y +B X +C Z +A X +A Z +C Z +C Z +A X +C Z +C X +A Z +C Y +B Z +C Y +B Z +A Y +A Z +C Z +A Y +C Z +C Z +A X +C Z +C Z +C Z +B Y +C X +C Y +C Z +B X +A Z +C Z +C X +B Y +A Y +B Y +C Z +C Z +C Z +A Y +A X +C Z +C Z +C Z +C Z +B Y +A Z +C Z +A X +A Y +B Z diff --git a/src/bin/day02_1.rs b/src/bin/day02_1.rs new file mode 100644 index 0000000..b5e147f --- /dev/null +++ b/src/bin/day02_1.rs @@ -0,0 +1,7 @@ +use aoc2022::day02::process_part_1; +use std::fs; + +fn main() { + let file = fs::read_to_string("./inputs/day2.txt").unwrap(); + println!("{}", process_part_1(&file)); +} diff --git a/src/bin/day02_2.rs b/src/bin/day02_2.rs new file mode 100644 index 0000000..b1f1e93 --- /dev/null +++ b/src/bin/day02_2.rs @@ -0,0 +1,7 @@ +use aoc2022::day02::process_part_2; +use std::fs; + +fn main() { + let file = fs::read_to_string("./inputs/day2.txt").unwrap(); + println!("{}", process_part_2(&file)); +} diff --git a/src/day01.rs b/src/day01.rs index 0f870f9..63a9ca9 100644 --- a/src/day01.rs +++ b/src/day01.rs @@ -1,7 +1,11 @@ pub fn process_part_1(input: &str) -> u32 { let result = input .split("\n\n") - .map(|part| part.lines().map(|snack| snack.parse::().unwrap()).sum::()) + .map(|part| { + part.lines() + .map(|snack| snack.parse::().unwrap()) + .sum::() + }) .max() .unwrap(); return result; @@ -10,7 +14,11 @@ pub fn process_part_1(input: &str) -> u32 { pub fn process_part_2(input: &str) -> u32 { let mut calories = input .split("\n\n") - .map(|part| part.lines().map(|snack| snack.parse::().unwrap()).sum::()) + .map(|part| { + part.lines() + .map(|snack| snack.parse::().unwrap()) + .sum::() + }) .collect::>(); calories.sort_by(|a, b| b.cmp(a)); calories.iter().take(3).sum() diff --git a/src/day02.rs b/src/day02.rs new file mode 100644 index 0000000..0f6cf64 --- /dev/null +++ b/src/day02.rs @@ -0,0 +1,108 @@ +use std::cmp::Ordering; +use std::str::FromStr; + +#[derive(Debug, PartialEq, Copy, Clone)] +enum Move { + Rock = 1, + Paper = 2, + Scissors = 3, +} + +impl FromStr for Move { + type Err = String; + + fn from_str(s: &str) -> Result { + match s { + "A" | "X" => Ok(Move::Rock), + "B" | "Y" => Ok(Move::Paper), + "C" | "Z" => Ok(Move::Scissors), + _ => Err("Invalid move".to_string()), + } + } +} + +impl PartialOrd for Move { + fn partial_cmp(&self, other: &Self) -> Option { + if self == &Move::Rock && other == &Move::Scissors { + return Some(Ordering::Greater); + } else if self == &Move::Scissors && other == &Move::Rock { + return Some(Ordering::Less); + } + Some((*self as u8).cmp(&(*other as u8))) + } +} + +pub fn process_part_1(input: &str) -> u32 { + let result = input + .lines() + .map(|line| { + let moves = line + .split(" ") + .map(|s| s.parse::().unwrap()) + .collect::>(); + match moves[1].partial_cmp(&moves[0]) { + Some(Ordering::Greater) => 6 + moves[1] as u32, + Some(Ordering::Equal) => 3 + moves[1] as u32, + Some(Ordering::Less) => moves[1] as u32, + None => panic!("Invalid move"), + } + }) + .sum(); + + return result; +} + +pub fn process_part_2(input: &str) -> u32 { + let result = input + .lines() + .map(|line| { + let moves = line.split(" ").collect::>(); + let opponent_move: Move = moves[0].parse().unwrap(); + match moves[1] { + "X" => { + // We need to lose + match opponent_move { + Move::Rock => Move::Scissors as u32, + Move::Paper => Move::Rock as u32, + Move::Scissors => Move::Paper as u32, + } + } + "Y" => { + // We play the same as the opponent + 3 + opponent_move as u32 + } + "Z" => { + // We need to win + let response = match opponent_move { + Move::Rock => Move::Paper, + Move::Paper => Move::Scissors, + Move::Scissors => Move::Rock, + }; + 6 + response as u32 + } + _ => panic!("Invalid move!"), + } + }) + .sum(); + + return result; +} + +#[cfg(test)] +mod tests { + use super::*; + + const INPUT: &str = "A Y +B X +C Z"; + + #[test] + fn day1() { + assert_eq!(process_part_1(INPUT), 15); + } + + #[test] + fn day2() { + assert_eq!(process_part_2(INPUT), 12); + } +} diff --git a/src/lib.rs b/src/lib.rs index 12b8f18..28326d5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1 +1,2 @@ pub mod day01; +pub mod day02;