From 108ef47eb5fa8d9e4b1342a697088a6c5611c9f0 Mon Sep 17 00:00:00 2001 From: jazzpi Date: Tue, 13 Dec 2022 13:11:56 +0100 Subject: [PATCH] Day 1, puzzle 2 --- src/bin/d1p2.rs | 15 +++++++++++++++ src/lib.rs | 1 + src/util.rs | 24 ++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 src/bin/d1p2.rs create mode 100644 src/util.rs 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) +}