day5 part2

This commit is contained in:
Glenn Griffin 2020-12-05 15:25:32 -08:00
parent 3711652475
commit c08646fc79

View File

@ -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)
}