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.
|
//! In this example, there are 7 measurements that are larger than the previous measurement.
|
||||||
//!
|
//!
|
||||||
//! How many measurements 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};
|
use aoc_runner_derive::{aoc, aoc_generator};
|
||||||
|
|
||||||
@ -61,6 +93,14 @@ fn part1(depths: &[u32]) -> u32 {
|
|||||||
.sum()
|
.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]
|
#[test]
|
||||||
fn test_part1() {
|
fn test_part1() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
@ -79,3 +119,22 @@ fn test_part1() {
|
|||||||
7
|
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