diff --git a/2021/day-1/src/main.rs b/2021/day-1/src/main.rs index e96a79a..1624749 100644 --- a/2021/day-1/src/main.rs +++ b/2021/day-1/src/main.rs @@ -14,39 +14,27 @@ fn solve(raw: String) -> () { .map(|x| parse_num::(x)) .collect::>(); - let part_one_deltas = rows[1..] - .iter() - .scan(rows[0], |state, curr| { - let diff = curr > state; + let compare = |state: &mut usize, curr: &u32| { + let result = *curr > rows[*state]; + *state += 1; - *state = *curr; + Some(result) + }; - Some(diff) - }) + let part_one_deltas = rows[1..] + .iter() + .scan(0usize, compare) .filter(|x| *x) .count(); println!("Part one: {}", part_one_deltas); // 1226 - let windows: Vec = rows[..rows.len() - 2] + let part_two_deltas = rows[3..] .iter() - .scan(0usize, |state, curr| { - let window_sum = curr + rows[*state + 1..*state + 3].iter().sum::(); - *state += 1; - - Some(window_sum) - }) - .collect(); - - let part_two_deltas = windows[1..] - .iter() - .scan(0usize, |state, curr| { - let index = *state; - *state += 1; - Some(*curr > windows[index]) - }) + .scan(0usize, compare) .filter(|x| *x) .count(); + println!("Part two: {}", part_two_deltas); // 1252 } diff --git a/2021/deno/day-1.ts b/2021/deno/day-1.ts index 0337c1a..25a154f 100644 --- a/2021/deno/day-1.ts +++ b/2021/deno/day-1.ts @@ -23,16 +23,9 @@ console.log("Part One:", deltas); const windowDeltas = data .reduce((prev: boolean[], _, index, src) => { - if (index === 0) return prev; - if (src.length - index < 3) return prev; - - const prevWindow = src.slice(index - 1, index + 2); - const nextWindow = src.slice(index, index + 3); - - const prevSum = prevWindow.reduce(sum); - const nextSum = nextWindow.reduce(sum); + if (index < 3) return prev; - return [...prev, nextSum > prevSum]; + return [...prev, src[index] > src[index - 3]]; }, []) .filter(Boolean).length;