use std::fs::read_to_string; fn get_numbers_in_line_iter(str: &str) -> impl Iterator + '_ { str.split_whitespace().filter_map(|substr| substr.parse::().ok()) } fn main() { let mut sum1 = 0; let mut sum2 = 0; 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 sequence_length = working_vec.len() - 1; while sequence_length > 0 { let mut all_zeros = true; working_vec.push(working_vec[0]); for i in 0..sequence_length { working_vec[i] = working_vec[i + 1] - working_vec[i]; if working_vec[i] != 0 { all_zeros = false; } } if all_zeros { break; } 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); sum1 += extrapolated1; sum2 += extrapolated2; working_vec.clear(); } println!("Sum1: {}", sum1); println!("Sum2: {}", sum2); }