1
0
Fork 0
aoc2020/src/bin/day5.rs

32 lines
731 B
Rust
Raw Permalink Normal View History

const INPUT: &str = include_str!("../../data/day5");
2020-12-05 09:50:09 +00:00
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)]
struct Seat {
id: u16,
}
impl Seat {
fn parse(data: &str) -> Self {
let data = data.trim();
assert_eq!(data.len(), 10);
let id = data.chars().map(|c| c == 'B' || c == 'R').fold(0, |mask, bit| mask * 2 + if bit { 1 } else { 0 });
Self { id }
}
fn parse_list(input: &str) -> Vec<Self> {
input.lines().map(Seat::parse).collect()
}
}
fn main() {
let mut seats = Seat::parse_list(INPUT);
println!("Max Seat id: {}", seats.iter().max().unwrap().id);
seats.sort();
for i in 0..seats.len()-1 {
if seats[i].id + 1 != seats[i+1].id {
println!("Empty seat: {}", seats[i].id + 1);
break;
}
}
}