diff --git a/src/day1.rs b/src/day1.rs index 5a8a24d..4883341 100644 --- a/src/day1.rs +++ b/src/day1.rs @@ -1,5 +1,6 @@ use aoc_runner_derive::{aoc, aoc_generator}; + #[aoc_generator(day1)] pub fn input_generator(input: &str) -> Vec { input diff --git a/src/day2.rs b/src/day2.rs index 0c94a63..8dc5d05 100644 --- a/src/day2.rs +++ b/src/day2.rs @@ -54,10 +54,10 @@ pub fn input_generator(input: &str) -> Vec { #[aoc(day2, part1)] pub fn solve_part1(input: &Vec) -> usize { - return input.iter().filter(|v| v.is_valid_part1()).count(); + return input.iter().filter(|v| v.is_valid_part1()).count() } #[aoc(day2, part2)] pub fn solve_part2(input: &Vec) -> usize { - return input.iter().filter(|v| v.is_valid_part2()).count(); + return input.iter().filter(|v| v.is_valid_part2()).count() } diff --git a/src/day4.rs b/src/day4.rs index c4ff25c..fbbb544 100644 --- a/src/day4.rs +++ b/src/day4.rs @@ -76,9 +76,6 @@ impl Creds { } fn validate_hcl(val: &str) -> bool { - if val.len() != 7 { - return false; - } let mut ch = val.chars(); if ch.next() != Some('#') { return false; diff --git a/src/day5.rs b/src/day5.rs index 9155dd4..2923abd 100644 --- a/src/day5.rs +++ b/src/day5.rs @@ -1,90 +1,87 @@ -use aoc_runner_derive::{aoc, aoc_generator}; - -#[derive(Debug, Eq, PartialEq)] -pub enum Direction { - Front, - Back, - Left, - Right, -} - -#[aoc_generator(day5)] -pub fn input_generator(input: &str) -> Vec> { - input - .lines() - .map(|line| { - line.chars() - .map(|c| match c { - 'L' => Direction::Left, - 'R' => Direction::Right, - 'F' => Direction::Front, - 'B' => Direction::Back, - other => panic!("Invalid direction: {}", other), - }) - .collect() - }) - .collect() -} - -pub fn seat_to_pos(seat: &Vec) -> (usize, usize) { - let mut col_range: (usize, usize) = (0, 8); - let mut row_range: (usize, usize) = (0, 128); - for inst in seat { - let delta_col = (col_range.1 - col_range.0) / 2; - let delta_row = (row_range.1 - row_range.0) / 2; - match inst { - Direction::Back => { - row_range.0 += delta_row; - } - Direction::Front => { - row_range.1 -= delta_row; - } - Direction::Left => { - col_range.1 -= delta_col; - } - Direction::Right => { - col_range.0 += delta_col; - } - } - } - if row_range.1 - row_range.0 != 1 { - panic!("Invalid!"); - } - if col_range.1 - col_range.0 != 1 { - panic!("Invalid!"); - } - return (col_range.0, row_range.0); -} - -#[aoc(day5, part1)] -pub fn solve_part1(input: &Vec>) -> usize { - let mut max_seat_id: usize = 0; - for seat in input { - let pos = seat_to_pos(seat); - let seat_id = pos.0 + pos.1 * 8; - max_seat_id = std::cmp::max(max_seat_id, seat_id); - } - return max_seat_id; -} - -#[aoc(day5, part2)] -pub fn solve_part2(input: &Vec>) -> usize { - let mut seats = [[false; 8]; 128]; - for seat in input { - let pos = seat_to_pos(seat); - seats[pos.1][pos.0] = true; - } - for id in 0..(8 * 128) { - let mut id = id; - let mut v = (false, false, false); - v.0 = seats[id / 8][id % 8]; - id += 1; - v.1 = seats[id / 8][id % 8]; - id += 1; - v.2 = seats[id / 8][id % 8]; - if v == (true, false, true) { - return id - 1; - } - } - panic!("Something went wrong!"); -} +use aoc_runner_derive::{aoc, aoc_generator}; + +#[derive(Debug,Eq,PartialEq)] +pub enum Direction { + Front, + Back, + Left, + Right +} + +#[aoc_generator(day5)] +pub fn input_generator(input: &str) -> Vec> { + input.lines().map(|line| { + line.chars().map(|c| { + match c { + 'L' => Direction::Left, + 'R' => Direction::Right, + 'F' => Direction::Front, + 'B' => Direction::Back, + other => panic!("Invalid direction: {}",other) + } + }).collect() + }).collect() +} + +pub fn seat_to_pos(seat: &Vec) -> (usize,usize) { + let mut col_range: (usize, usize) = (0,8); + let mut row_range: (usize, usize) = (0,128); + for inst in seat { + let delta_col = (col_range.1-col_range.0)/2; + let delta_row = (row_range.1-row_range.0)/2; + match inst { + Direction::Back => { + row_range.0+=delta_row; + }, + Direction::Front => { + row_range.1-=delta_row; + }, + Direction::Left => { + col_range.1-=delta_col; + }, + Direction::Right => { + col_range.0+=delta_col; + }, + } + } + if row_range.1-row_range.0 != 1 { + panic!("Invalid!"); + } + if col_range.1-col_range.0 != 1 { + panic!("Invalid!"); + } + return (col_range.0,row_range.0); +} + +#[aoc(day5, part1)] +pub fn solve_part1(input: &Vec>) -> usize { + let mut max_seat_id: usize = 0; + for seat in input { + let pos = seat_to_pos(seat); + let seat_id = pos.0+pos.1*8; + max_seat_id=std::cmp::max(max_seat_id,seat_id); + } + return max_seat_id; +} + +#[aoc(day5, part2)] +pub fn solve_part2(input: &Vec>) -> usize { + let mut seats = [[false;8];128]; + for seat in input { + let pos = seat_to_pos(seat); + seats[pos.1][pos.0]=true; + } + for id in 0..(8*128) { + let mut id=id; + let mut v=(false,false,false); + v.0=seats[id/8][id%8]; + id+=1; + v.1=seats[id/8][id%8]; + id+=1; + v.2=seats[id/8][id%8]; + if v==(true,false,true) { + return id-1; + } + } + panic!("Something went wrong!"); +} \ No newline at end of file