From 3d2785b7d34a1caef284aa9166fa54a3c847b4b7 Mon Sep 17 00:00:00 2001 From: George Thomas Date: Wed, 7 Jan 2026 14:45:55 +0000 Subject: [PATCH] Make Rust day 5 vector operations more efficient We do more in-place and operate on the end of the vector to avoid quadratic complexity. --- rust/puzzles/day5.rs | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/rust/puzzles/day5.rs b/rust/puzzles/day5.rs index c7406af..68e2b0a 100644 --- a/rust/puzzles/day5.rs +++ b/rust/puzzles/day5.rs @@ -58,11 +58,8 @@ impl Range { fn contains(&self, n: usize) -> bool { n >= self.lower && n <= self.upper } - fn extend(&self, upper: usize) -> Range { - Range { - lower: self.lower, - upper: self.upper.max(upper), - } + fn extend(&mut self, upper: usize) { + self.upper = upper } } @@ -72,16 +69,13 @@ impl Ranges { Ranges(Vec::new()) } fn add(&mut self, new: Range) { - if self.0.is_empty() { - self.0.push(new); - } else { - let first = &self.0[0]; - if first.contains(new.lower) { - self.0[0] = first.extend(new.upper); - } else { - self.0.insert(0, new); + if let Some(last) = self.0.last_mut() { + if last.contains(new.lower) { + last.extend(last.upper.max(new.upper)); + return; } } + self.0.push(new); } fn total_length(&self) -> usize { self.0.iter().map(|r| r.length()).sum()