diff --git a/day9/src/main.rs b/day9/src/main.rs index b41bd7e..23c1354 100644 --- a/day9/src/main.rs +++ b/day9/src/main.rs @@ -10,11 +10,15 @@ fn main() { let mut working_vec: Vec = Vec::new(); for line in read_to_string("input.txt").unwrap().lines() { working_vec.extend(get_numbers_in_line_iter::(line)); - let original_length = working_vec.len(); + let mut extrapolated1 = 0; + let mut extrapolated2 = 0; let mut sequence_length = working_vec.len() - 1; while sequence_length > 0 { let mut all_zeros = true; - working_vec.push(working_vec[0]); + // accumulate last element for task 1 + extrapolated1 += working_vec[sequence_length]; + // accumulate first element with subtraction for task 2 + extrapolated2 = working_vec[0] - extrapolated2; for i in 0..sequence_length { working_vec[i] = working_vec[i + 1] - working_vec[i]; if working_vec[i] != 0 { @@ -26,9 +30,10 @@ fn main() { } sequence_length -= 1; } - let extrapolated1 = working_vec[sequence_length..original_length].iter().sum::(); - let extrapolated2 = working_vec[original_length..].iter().rev().fold( - 0, |acc, x| x - acc); + // flip sign if there was an even amount of elements to account for processing it in reverse + if (working_vec.len() - sequence_length) % 2 == 0 { + extrapolated2 = -extrapolated2; + } sum1 += extrapolated1; sum2 += extrapolated2; working_vec.clear();