[TASK] Solved Day 5
This commit is contained in:
76
src/day5.rs
Normal file
76
src/day5.rs
Normal file
@@ -0,0 +1,76 @@
|
||||
use super::util;
|
||||
|
||||
pub fn solve() {
|
||||
|
||||
let lines = util::read_file("input/day5.txt");
|
||||
|
||||
let seats = lines.iter()
|
||||
.map(|s| Seat::parse(s))
|
||||
.collect::<Vec<Seat>>();
|
||||
|
||||
let part1 = seats.iter()
|
||||
.map(|s| s.seat_id())
|
||||
.max().unwrap_or(0);
|
||||
|
||||
println!("Day 5 Part 1: {}", part1);
|
||||
println!("Day 5 Part 2: {}", solve_part2(&seats));
|
||||
|
||||
}
|
||||
|
||||
fn solve_part2(seats: &Vec<Seat>) -> u16 {
|
||||
let mut seat_ids = seats.iter()
|
||||
.map(|s| s.seat_id())
|
||||
.collect::<Vec<u16>>();
|
||||
seat_ids.sort();
|
||||
for i in 0..seat_ids.len() {
|
||||
let seat_id = seat_ids[i];
|
||||
// Skip first and last row:
|
||||
if seat_id < 8 || seat_id > (127 << 3) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if seat_id + 1 != seat_ids[i + 1] {
|
||||
return seat_id + 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Seat {
|
||||
row: u8,
|
||||
col: u8
|
||||
}
|
||||
|
||||
impl Seat {
|
||||
|
||||
pub fn parse(input: &str) -> Seat {
|
||||
|
||||
return Seat {
|
||||
row: Seat::parse_binary(&input[0..7], 'F', 'B'),
|
||||
col: Seat::parse_binary(&input[7..10], 'L', 'R')
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_binary(src: &str, zero: char, one: char) -> u8 {
|
||||
|
||||
let mut chars = src.chars();
|
||||
let mut res = 0;
|
||||
for i in 0..src.len() {
|
||||
let c = chars.next().unwrap();
|
||||
if c == one {
|
||||
res |= 1 << (src.len() - i - 1)
|
||||
} else if c != zero {
|
||||
eprintln!("Found unknown character: {}", c);
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
pub fn seat_id(&self) -> u16 {
|
||||
|
||||
return ((self.row as u16) << 3) | (self.col as u16);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,6 +6,7 @@ mod day1;
|
||||
mod day2;
|
||||
mod day3;
|
||||
mod day4;
|
||||
mod day5;
|
||||
|
||||
fn main() {
|
||||
|
||||
@@ -20,6 +21,7 @@ fn main() {
|
||||
2 => day2::solve(),
|
||||
3 => day3::solve(),
|
||||
4 => day4::solve(),
|
||||
5 => day5::solve(),
|
||||
_ => println!("This day is not yet implemented")
|
||||
}
|
||||
} else {
|
||||
@@ -28,6 +30,7 @@ fn main() {
|
||||
day2::solve();
|
||||
day3::solve();
|
||||
day4::solve();
|
||||
day5::solve();
|
||||
}
|
||||
|
||||
println!("Execution took {} μs", now.elapsed().as_micros());
|
||||
|
||||
Reference in New Issue
Block a user