day 9
This commit is contained in:
38
day9/src/main.rs
Normal file
38
day9/src/main.rs
Normal file
@@ -0,0 +1,38 @@
|
||||
use std::fs::read_to_string;
|
||||
|
||||
fn get_numbers_in_line_iter<T: std::str::FromStr>(str: &str) -> impl Iterator<Item=T> + '_ {
|
||||
str.split_whitespace().filter_map(|substr| substr.parse::<T>().ok())
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut sum1 = 0;
|
||||
let mut sum2 = 0;
|
||||
let mut working_vec: Vec<i32> = Vec::new();
|
||||
for line in read_to_string("input.txt").unwrap().lines() {
|
||||
working_vec.extend(get_numbers_in_line_iter::<i32>(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::<i32>();
|
||||
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);
|
||||
}
|
Reference in New Issue
Block a user