day1 part2
This commit is contained in:
parent
6de9b72fae
commit
76da21b3cc
@ -40,6 +40,38 @@
|
||||
//! In this example, there are 7 measurements that are larger than the previous measurement.
|
||||
//!
|
||||
//! How many measurements are larger than the previous measurement?
|
||||
//! --- Part Two ---
|
||||
//! Considering every single measurement isn't as useful as you expected: there's just too much noise in the data.
|
||||
//!
|
||||
//! Instead, consider sums of a three-measurement sliding window. Again considering the above example:
|
||||
//!
|
||||
//! 199 A
|
||||
//! 200 A B
|
||||
//! 208 A B C
|
||||
//! 210 B C D
|
||||
//! 200 E C D
|
||||
//! 207 E F D
|
||||
//! 240 E F G
|
||||
//! 269 F G H
|
||||
//! 260 G H
|
||||
//! 263 H
|
||||
//! Start by comparing the first and second three-measurement windows. The measurements in the first window are marked A (199, 200, 208); their sum is 199 + 200 + 208 = 607. The second window is marked B (200, 208, 210); its sum is 618. The sum of measurements in the second window is larger than the sum of the first, so this first comparison increased.
|
||||
//!
|
||||
//! Your goal now is to count the number of times the sum of measurements in this sliding window increases from the previous sum. So, compare A with B, then compare B with C, then C with D, and so on. Stop when there aren't enough measurements left to create a new three-measurement sum.
|
||||
//!
|
||||
//! In the above example, the sum of each three-measurement window is as follows:
|
||||
//!
|
||||
//! A: 607 (N/A - no previous sum)
|
||||
//! B: 618 (increased)
|
||||
//! C: 618 (no change)
|
||||
//! D: 617 (decreased)
|
||||
//! E: 647 (increased)
|
||||
//! F: 716 (increased)
|
||||
//! G: 769 (increased)
|
||||
//! H: 792 (increased)
|
||||
//! In this example, there are 5 sums that are larger than the previous sum.
|
||||
//!
|
||||
//! Consider sums of a three-measurement sliding window. How many sums are larger than the previous sum?
|
||||
|
||||
use aoc_runner_derive::{aoc, aoc_generator};
|
||||
|
||||
@ -61,6 +93,14 @@ fn part1(depths: &[u32]) -> u32 {
|
||||
.sum()
|
||||
}
|
||||
|
||||
#[aoc(day1, part2)]
|
||||
fn part2(depths: &[u32]) -> u32 {
|
||||
let sums: Vec<u32> = depths.windows(3).map(|s| s.iter().sum()).collect();
|
||||
sums.windows(2)
|
||||
.map(|s| if s[0] < s[1] { 1 } else { 0 })
|
||||
.sum()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part1() {
|
||||
assert_eq!(
|
||||
@ -79,3 +119,22 @@ fn test_part1() {
|
||||
7
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part2() {
|
||||
assert_eq!(
|
||||
part2(&parse(
|
||||
r#"199
|
||||
200
|
||||
208
|
||||
210
|
||||
200
|
||||
207
|
||||
240
|
||||
269
|
||||
260
|
||||
263"#
|
||||
)),
|
||||
5
|
||||
);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user