forked from ggriffiniii/aoc
day5 part2
This commit is contained in:
parent
3711652475
commit
c08646fc79
30
src/day5.rs
30
src/day5.rs
@ -54,3 +54,33 @@ pub fn solve_d5_p1(input: &[u8]) -> SeatId {
|
|||||||
.max()
|
.max()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[aoc(day5, part2)]
|
||||||
|
pub fn solve_d5_p2(input: &[u8]) -> SeatId {
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct MinMaxSum {
|
||||||
|
min: u16,
|
||||||
|
max: u16,
|
||||||
|
sum: u32,
|
||||||
|
}
|
||||||
|
let MinMaxSum { min, max, sum } = input
|
||||||
|
.split(|&b| b == b'\n')
|
||||||
|
.map(|i| SeatId::parse(i).unwrap())
|
||||||
|
.fold(
|
||||||
|
MinMaxSum {
|
||||||
|
min: u16::MAX,
|
||||||
|
max: 0,
|
||||||
|
sum: 0,
|
||||||
|
},
|
||||||
|
|MinMaxSum { min, max, sum }, seatid| MinMaxSum {
|
||||||
|
min: std::cmp::min(min, seatid.0),
|
||||||
|
max: std::cmp::max(max, seatid.0),
|
||||||
|
sum: sum + seatid.0 as u32,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
let max = max as u32;
|
||||||
|
let min = min as u32;
|
||||||
|
let num_seats = max - min + 1;
|
||||||
|
let expected_sum = (max + min) * num_seats / 2;
|
||||||
|
SeatId((expected_sum - sum) as u16)
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user