diff options
Diffstat (limited to 'src/2022/1/mod.rs')
-rw-r--r-- | src/2022/1/mod.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/2022/1/mod.rs b/src/2022/1/mod.rs new file mode 100644 index 0000000..4f644d6 --- /dev/null +++ b/src/2022/1/mod.rs @@ -0,0 +1,41 @@ +#![allow(dead_code)] +#![allow(unused_variables)] + +use crate::prelude::*; + +pub fn parse(fh: File) -> Result<Vec<i64>> { + let mut elves = vec![]; + let mut cur = 0; + for line in parse::lines(fh) { + let line = line.trim(); + if line.is_empty() { + elves.push(cur); + cur = 0; + } else { + cur += line.parse::<i64>()?; + } + } + elves.push(cur); + Ok(elves) +} + +pub fn part1(elves: Vec<i64>) -> Result<i64> { + Ok(elves.iter().copied().max().unwrap_or(0)) +} + +pub fn part2(mut elves: Vec<i64>) -> Result<i64> { + elves.sort(); + Ok(elves.iter().rev().copied().take(3).sum()) +} + +#[test] +fn test() { + assert_eq!( + part1(parse(parse::data(2022, 1).unwrap()).unwrap()).unwrap(), + 67658 + ); + assert_eq!( + part2(parse(parse::data(2022, 1).unwrap()).unwrap()).unwrap(), + 200158 + ); +} |