diff --git a/src/bin/d1p2.rs b/src/bin/d1p2.rs new file mode 100644 index 0000000..ccea78f --- /dev/null +++ b/src/bin/d1p2.rs @@ -0,0 +1,15 @@ +use aoc22::day1; +use aoc22::util; + +const N_ELVES: usize = 3; + +fn main() { + let elves = day1::read_elves(); + + let max_vals = util::max_n(elves.as_slice(), N_ELVES).unwrap(); + println!( + "The {} elves with the most calories are carrying {} cal", + N_ELVES, + max_vals.iter().sum::() + ); +} diff --git a/src/lib.rs b/src/lib.rs index 8b2a328..d338c7e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1 +1,2 @@ pub mod day1; +pub mod util; diff --git a/src/util.rs b/src/util.rs new file mode 100644 index 0000000..d67db2a --- /dev/null +++ b/src/util.rs @@ -0,0 +1,24 @@ +pub fn max_n(slice: &[T], n: usize) -> Result, ()> { + if n == 0 || n > slice.len() { + return Err(()); + } + let mut max_vals = Vec::new(); + for _ in 0..n { + max_vals.push(slice[0]); + } + + for val in slice { + if val > &max_vals[0] { + max_vals[2] = max_vals[1]; + max_vals[1] = max_vals[0]; + max_vals[0] = *val; + } else if val > &max_vals[1] { + max_vals[2] = max_vals[1]; + max_vals[1] = *val; + } else if val > &max_vals[2] { + max_vals[2] = *val; + } + } + + Ok(max_vals) +}