usebitvec::prelude::*;implSeat{constROW_BITS:usize=7;constCOL_BITS:usize=3;fnparse(input:&str)->Self{letbytes=input.as_bytes();letmutres:Seat=Default::default();{letrow=BitSlice::<Msb0,_>::from_element_mut(&mutres.row);for(i,&b)inbytes[0..Self::ROW_BITS].iter().enumerate(){row.set((8-Self::ROW_BITS)+i,matchb{b'F'=>false,b'B'=>true,_=>panic!("unexpected row letter : {}",baschar),},);}}{letcol=BitSlice::<Msb0,_>::from_element_mut(&mutres.col);for(i,&b)inbytes[Self::ROW_BITS..][..Self::COL_BITS].iter().enumerate(){col.set((8-Self::COL_BITS)+i,matchb{b'L'=>false,b'R'=>true,_=>panic!("unexpected col letter : {}",baschar),},);}}res}}
fnmain(){letmax_id=itertools::max(include_str!("input.txt").lines().map(Seat::parse).map(|seat|seat.id()),);println!("The maximum seat ID is {:?}",max_id);}
fnmain(){letmutids:Vec<_>=include_str!("input.txt").lines().map(Seat::parse).collect();ids.sort();letmutlast_id:Option<Seat>=None;foridinids{ifletSome(last_id)=last_id{letgap=id.id()-last_id.id();ifgap>1{println!("Our seat ID is {}",last_id.id());return;}}last_id=Some(id);}}