From 4a2e0fef5534a26f22d852a3b60aeccee46a2956 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Sat, 9 Dec 2023 13:20:31 +0100 Subject: [PATCH] =?UTF-8?q?day(09):=20do=20=E2=80=B9find=5Fnext=E2=80=BA?= =?UTF-8?q?=20in-situ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- src/bin/day09.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/bin/day09.rs b/src/bin/day09.rs index 81bb313..dedf28e 100644 --- a/src/bin/day09.rs +++ b/src/bin/day09.rs @@ -8,18 +8,20 @@ struct Day09 { } impl Day09 { - fn find_next(xs: &[i32]) -> i32 { + fn find_next(mut xs: Vec) -> i32 { + let last = *xs.last().unwrap(); + let mut ds = vec![]; + while xs.iter().any(|&x| x != 0) { + for i in 0..xs.len() - 1 { + xs[i] = xs[i + 1] - xs[i]; + } + xs.pop(); - let mut last_row = xs.to_owned(); - while last_row.iter().any(|&x| x != 0) { - let next_row = last_row.windows(2).map(|s| s[1] - s[0]).collect_vec(); - - ds.push(*next_row.last().unwrap()); - last_row = next_row; + ds.push(*xs.last().unwrap()); } - xs.last().unwrap() + ds.iter().rev().sum::() + last + ds.iter().rev().sum::() } } @@ -34,7 +36,7 @@ impl Solution for Day09 { } fn part_1(&mut self) -> Output1 { - self.values.iter().map(|xs| Self::find_next(xs)).sum() + self.values.iter().cloned().map(Self::find_next).sum() } fn part_2(&mut self) -> Output2 { @@ -46,7 +48,7 @@ impl Solution for Day09 { ys }) - .map(|xs| Self::find_next(&xs)) + .map(Self::find_next) .sum() } }