This commit is contained in:
nora 2023-12-09 14:14:18 +01:00
parent b3bf7b2a97
commit 96a3f6da2c
2 changed files with 21 additions and 21 deletions

View file

@ -10,28 +10,28 @@ fn execute(
last_or_first: impl Fn(&[i64]) -> i64, last_or_first: impl Fn(&[i64]) -> i64,
fold: impl Fn(i64, i64) -> i64 + Copy, fold: impl Fn(i64, i64) -> i64 + Copy,
) -> i64 { ) -> i64 {
let mut values = Vec::with_capacity(128); let mut row1 = Vec::with_capacity(128);
let mut derive = Vec::with_capacity(128); let mut row2 = Vec::with_capacity(128);
let mut last_values = Vec::with_capacity(16); let mut last_values = Vec::with_capacity(16);
input input
.map(|values_iter| { .map(|values_iter| {
values.clear(); row1.clear();
values.extend(values_iter); row1.extend(values_iter);
derive.clone_from(&values); row2.clone_from(&row1);
last_values.clear(); last_values.clear();
last_values.push(last_or_first(&values)); last_values.push(last_or_first(&row1));
while !derive.iter().all(|&n| n == 0) { while !row2.iter().all(|&n| n == 0) {
values.clear(); row1.clear();
values.extend(derive.windows(2).map(|s| s[1] - s[0])); row1.extend(row2.windows(2).map(|s| s[1] - s[0]));
last_values.push(last_or_first(&values)); last_values.push(last_or_first(&row1));
std::mem::swap(&mut values, &mut derive); std::mem::swap(&mut row1, &mut row2);
} }
last_values.iter().copied().rev().fold(0, fold) last_values.iter().copied().rev().fold(0, fold)

View file

@ -46,20 +46,20 @@ fn execute(
fold: impl Fn(i64, i64) -> i64 + Copy, fold: impl Fn(i64, i64) -> i64 + Copy,
) -> i64 { ) -> i64 {
input input
.map(|mut values| { .map(|mut row1| {
let mut last_values = vec![last_or_first(&values)]; let mut last_values = vec![last_or_first(&row1)];
let mut derive = values.clone(); let mut row2 = row1.clone();
while !derive.iter().all(|&n| n == 0) { while !row2.iter().all(|&n| n == 0) {
values.clear(); row1.clear();
values.extend(derive.windows(2).map(|s| s[1] - s[0])); row1.extend(row2.windows(2).map(|s| s[1] - s[0]));
last_values.push(last_or_first(&values)); last_values.push(last_or_first(&row1));
let tmp = derive; let tmp = row2;
derive = values; row2 = row1;
values = tmp; row1 = tmp;
} }
last_values.into_iter().rev().fold(0, fold) last_values.into_iter().rev().fold(0, fold)