Skip to content

Instantly share code, notes, and snippets.

@wilkmaia
Created December 6, 2020 01:59
Show Gist options
  • Save wilkmaia/c0277e436fb28a1ce06a19617be4aabd to your computer and use it in GitHub Desktop.
Save wilkmaia/c0277e436fb28a1ce06a19617be4aabd to your computer and use it in GitHub Desktop.
Advent of Code - Day 5 - Rust
use std::fs::File;
use std::io::prelude::*;
use std::collections::HashSet;
#[derive(Debug)]
struct BoardingPass {
row: u8,
col: u8,
id: u16,
}
fn parse_boarding_pass(line: &str) -> BoardingPass {
let (row_data, col_data) = line.split_at(7);
let (row, _) = row_data.chars().fold((0, 127), |acc, c| -> (u8, u8) {
match c {
'F' => (acc.0, (acc.0 + acc.1)/2),
'B' => ((acc.0 + acc.1)/2 + 1, acc.1),
_ => (0, 0),
}
});
let (col, _) = col_data.chars().fold((0, 7), |acc, c| -> (u8, u8) {
match c {
'L' => (acc.0, (acc.0 + acc.1)/2),
'R' => ((acc.0 + acc.1)/2 + 1, acc.1),
_ => (0, 0),
}
});
BoardingPass {
row,
col,
id: 8 * (row as u16) + col as u16,
}
}
fn initialize_array(arr: &mut Vec<BoardingPass>) {
let mut file = File::open("./input").unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
for line in contents.split('\n') {
arr.push(parse_boarding_pass(line));
}
}
fn problem1(boarding_passes: &Vec<BoardingPass>) {
let max = boarding_passes.iter().fold(0, |acc, b| -> u16 {
if b.id > acc {
return b.id
} else {
acc
}
});
println!("Problem 1 -> {}", max);
}
fn problem2(boarding_passes: &Vec<BoardingPass>) {
let mut seats = HashSet::new();
let max = boarding_passes.iter().fold(0, |acc, b| {
seats.insert(b.id);
if b.id > acc {
return b.id
} else {
acc
}
});
let mut seat: u16 = 0;
for i in 1..(max - 2) {
if seats.contains(&(i - 1)) && seats.contains(&(i + 1)) && !seats.contains(&i) {
seat = i;
break;
}
}
println!("Problem 2 -> {}", seat);
}
fn main() {
let mut boarding_passes = Vec::<BoardingPass>::new();
initialize_array(&mut boarding_passes);
problem1(&boarding_passes);
problem2(&boarding_passes);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment