From 73ea25236ffb5d0d0e729494d2dd431ac519e5c4 Mon Sep 17 00:00:00 2001 From: George Thomas Date: Fri, 19 Dec 2025 15:34:13 +0000 Subject: [PATCH] Improve error handling by not panicking in helper function --- rust/puzzles/day3.rs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/rust/puzzles/day3.rs b/rust/puzzles/day3.rs index fda7e32..21d75c0 100644 --- a/rust/puzzles/day3.rs +++ b/rust/puzzles/day3.rs @@ -52,20 +52,24 @@ fn max_batteries(n: usize, v: &[u8]) -> Option> { let mut remaining = n; let mut slice = v; while remaining > 0 { - if slice.len() - remaining + 1 == 0 { - return None; + match find_max(&slice[..slice.len() - remaining + 1]) { + Some((b, i)) => { + result.push(b); + remaining -= 1; + slice = &slice[i + 1..]; + } + None => return None, } - let (b, i) = find_max(&slice[..slice.len() - remaining + 1]); - result.push(b); - remaining -= 1; - slice = &slice[i + 1..]; } Some(result) } -fn find_max(v: &[A]) -> (A, usize) { - let (n, x) = v.iter().enumerate().rev().max_by_key(|x| x.1).unwrap(); - (*x, n) +fn find_max(v: &[A]) -> Option<(A, usize)> { + v.iter() + .enumerate() + .rev() + .max_by_key(|x| x.1) + .map(|(n, x)| (*x, n)) } fn digits_to_int(digits: &[u8]) -> usize {