mirror of
https://github.com/Noratrieb/advent-of-code.git
synced 2026-01-14 17:45:02 +01:00
cleanup
This commit is contained in:
parent
b3bf7b2a97
commit
96a3f6da2c
2 changed files with 21 additions and 21 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue