From 92c985cbd4ea388c6d1ba9dbe05e0248f2f40dac Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Sat, 9 Dec 2023 19:10:01 +0100 Subject: [PATCH] Unify part 1 and 2 better --- 2023/src/day09.rs | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/2023/src/day09.rs b/2023/src/day09.rs index 4742663..d7e00e0 100644 --- a/2023/src/day09.rs +++ b/2023/src/day09.rs @@ -15,12 +15,11 @@ fn parse_reports(i: &[u8]) -> IResult<&[u8], Vec>> { ))(i) } -fn compute_next(report: &[i32]) -> i32 { +fn compute_next<'a>(report: impl IntoIterator) -> i32 { let mut deltas = Vec::new(); - for w in report.windows(2) { - let mut delta = w[1] - w[0]; - + for &entry in report { + let mut delta = entry; for prev_delta in &mut deltas { let prev = mem::replace(prev_delta, delta); delta = delta - prev; @@ -31,14 +30,15 @@ fn compute_next(report: &[i32]) -> i32 { } } - let next_step = deltas.drain(..).rev().fold(0, |c, d| c + d); - - report.last().unwrap() + next_step + deltas.drain(..).rev().fold(0, |c, d| c + d) } pub fn part1(input: &[u8]) -> anyhow::Result { let reports = parse_input(input, parse_reports)?; - let result: i32 = reports.iter().map(|report| compute_next(&report)).sum(); + let result: i32 = reports + .iter() + .map(|report| compute_next(report.iter())) + .sum(); Ok(result.to_string()) } @@ -46,10 +46,7 @@ pub fn part2(input: &[u8]) -> anyhow::Result { let mut reports = parse_input(input, parse_reports)?; let result: i32 = reports .iter_mut() - .map(|report| { - report.reverse(); - compute_next(&report) - }) + .map(|report| compute_next(report.iter().rev())) .sum(); Ok(result.to_string()) }