1
0
mirror of https://github.com/chylex/Advent-of-Code.git synced 2025-05-19 01:34:04 +02:00

Add 2020 - Day 5 - Part 2

This commit is contained in:
chylex 2022-02-24 04:55:03 +01:00
parent 68fa8a157c
commit 7c66aada65
Signed by: chylex
GPG Key ID: 4DE42C8F19A80548

View File

@ -1,16 +1,32 @@
use std::collections::HashSet;
use std::error::Error;
use crate::pass::BoardingPass;
use crate::utils::GenericError;
#[path = "../utils/mod.rs"]
mod utils;
fn main() -> Result<(), Box<dyn Error>> {
let passes = utils::parse_input_lines::<BoardingPass>()?;
let seat_ids = passes.iter().map(BoardingPass::get_seat_id).collect::<HashSet<u32>>();
let max_seat_id = passes.iter().map(BoardingPass::get_seat_id).max().unwrap_or(0);
let max_seat_id = *seat_ids.iter().max().unwrap_or(&0);
println!("Max seat ID: {}", max_seat_id);
let missing_seat_ids = (0..=max_seat_id).filter(|id| !seat_ids.contains(id)).collect::<HashSet<u32>>();
let your_seat_id_candidates = missing_seat_ids.iter()
.map(|id| *id)
.filter(|id| *id > 0 && *id < max_seat_id && !missing_seat_ids.contains(&(*id - 1)) && !missing_seat_ids.contains(&(*id + 1)))
.collect::<Vec<u32>>();
if your_seat_id_candidates.len() != 1 {
Err(GenericError::new(format!("Cannot find your seat ID, too many candidates: {:?}", your_seat_id_candidates)))?;
}
else {
println!("Your seat ID: {}", your_seat_id_candidates.first().unwrap());
}
Ok(())
}