Compare commits
2 commits
0ffbddb7db
...
05c89e5f11
Author | SHA1 | Date | |
---|---|---|---|
05c89e5f11 | |||
561a1453df |
4 changed files with 95 additions and 90 deletions
|
@ -1,6 +1,5 @@
|
||||||
use aoc_runner_derive::{aoc, aoc_generator};
|
use aoc_runner_derive::{aoc, aoc_generator};
|
||||||
|
|
||||||
|
|
||||||
#[aoc_generator(day1)]
|
#[aoc_generator(day1)]
|
||||||
pub fn input_generator(input: &str) -> Vec<usize> {
|
pub fn input_generator(input: &str) -> Vec<usize> {
|
||||||
input
|
input
|
||||||
|
|
|
@ -54,10 +54,10 @@ pub fn input_generator(input: &str) -> Vec<Rule> {
|
||||||
|
|
||||||
#[aoc(day2, part1)]
|
#[aoc(day2, part1)]
|
||||||
pub fn solve_part1(input: &Vec<Rule>) -> usize {
|
pub fn solve_part1(input: &Vec<Rule>) -> usize {
|
||||||
return input.iter().filter(|v| v.is_valid_part1()).count()
|
return input.iter().filter(|v| v.is_valid_part1()).count();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day2, part2)]
|
#[aoc(day2, part2)]
|
||||||
pub fn solve_part2(input: &Vec<Rule>) -> usize {
|
pub fn solve_part2(input: &Vec<Rule>) -> usize {
|
||||||
return input.iter().filter(|v| v.is_valid_part2()).count()
|
return input.iter().filter(|v| v.is_valid_part2()).count();
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,6 +76,9 @@ impl Creds {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn validate_hcl(val: &str) -> bool {
|
fn validate_hcl(val: &str) -> bool {
|
||||||
|
if val.len() != 7 {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
let mut ch = val.chars();
|
let mut ch = val.chars();
|
||||||
if ch.next() != Some('#') {
|
if ch.next() != Some('#') {
|
||||||
return false;
|
return false;
|
||||||
|
|
81
src/day5.rs
81
src/day5.rs
|
@ -1,56 +1,59 @@
|
||||||
use aoc_runner_derive::{aoc, aoc_generator};
|
use aoc_runner_derive::{aoc, aoc_generator};
|
||||||
|
|
||||||
#[derive(Debug,Eq,PartialEq)]
|
#[derive(Debug, Eq, PartialEq)]
|
||||||
pub enum Direction {
|
pub enum Direction {
|
||||||
Front,
|
Front,
|
||||||
Back,
|
Back,
|
||||||
Left,
|
Left,
|
||||||
Right
|
Right,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc_generator(day5)]
|
#[aoc_generator(day5)]
|
||||||
pub fn input_generator(input: &str) -> Vec<Vec<Direction>> {
|
pub fn input_generator(input: &str) -> Vec<Vec<Direction>> {
|
||||||
input.lines().map(|line| {
|
input
|
||||||
line.chars().map(|c| {
|
.lines()
|
||||||
match c {
|
.map(|line| {
|
||||||
|
line.chars()
|
||||||
|
.map(|c| match c {
|
||||||
'L' => Direction::Left,
|
'L' => Direction::Left,
|
||||||
'R' => Direction::Right,
|
'R' => Direction::Right,
|
||||||
'F' => Direction::Front,
|
'F' => Direction::Front,
|
||||||
'B' => Direction::Back,
|
'B' => Direction::Back,
|
||||||
other => panic!("Invalid direction: {}",other)
|
other => panic!("Invalid direction: {}", other),
|
||||||
}
|
})
|
||||||
}).collect()
|
.collect()
|
||||||
}).collect()
|
})
|
||||||
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn seat_to_pos(seat: &Vec<Direction>) -> (usize,usize) {
|
pub fn seat_to_pos(seat: &Vec<Direction>) -> (usize, usize) {
|
||||||
let mut col_range: (usize, usize) = (0,8);
|
let mut col_range: (usize, usize) = (0, 8);
|
||||||
let mut row_range: (usize, usize) = (0,128);
|
let mut row_range: (usize, usize) = (0, 128);
|
||||||
for inst in seat {
|
for inst in seat {
|
||||||
let delta_col = (col_range.1-col_range.0)/2;
|
let delta_col = (col_range.1 - col_range.0) / 2;
|
||||||
let delta_row = (row_range.1-row_range.0)/2;
|
let delta_row = (row_range.1 - row_range.0) / 2;
|
||||||
match inst {
|
match inst {
|
||||||
Direction::Back => {
|
Direction::Back => {
|
||||||
row_range.0+=delta_row;
|
row_range.0 += delta_row;
|
||||||
},
|
}
|
||||||
Direction::Front => {
|
Direction::Front => {
|
||||||
row_range.1-=delta_row;
|
row_range.1 -= delta_row;
|
||||||
},
|
}
|
||||||
Direction::Left => {
|
Direction::Left => {
|
||||||
col_range.1-=delta_col;
|
col_range.1 -= delta_col;
|
||||||
},
|
}
|
||||||
Direction::Right => {
|
Direction::Right => {
|
||||||
col_range.0+=delta_col;
|
col_range.0 += delta_col;
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if row_range.1-row_range.0 != 1 {
|
}
|
||||||
|
if row_range.1 - row_range.0 != 1 {
|
||||||
panic!("Invalid!");
|
panic!("Invalid!");
|
||||||
}
|
}
|
||||||
if col_range.1-col_range.0 != 1 {
|
if col_range.1 - col_range.0 != 1 {
|
||||||
panic!("Invalid!");
|
panic!("Invalid!");
|
||||||
}
|
}
|
||||||
return (col_range.0,row_range.0);
|
return (col_range.0, row_range.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day5, part1)]
|
#[aoc(day5, part1)]
|
||||||
|
@ -58,29 +61,29 @@ pub fn solve_part1(input: &Vec<Vec<Direction>>) -> usize {
|
||||||
let mut max_seat_id: usize = 0;
|
let mut max_seat_id: usize = 0;
|
||||||
for seat in input {
|
for seat in input {
|
||||||
let pos = seat_to_pos(seat);
|
let pos = seat_to_pos(seat);
|
||||||
let seat_id = pos.0+pos.1*8;
|
let seat_id = pos.0 + pos.1 * 8;
|
||||||
max_seat_id=std::cmp::max(max_seat_id,seat_id);
|
max_seat_id = std::cmp::max(max_seat_id, seat_id);
|
||||||
}
|
}
|
||||||
return max_seat_id;
|
return max_seat_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day5, part2)]
|
#[aoc(day5, part2)]
|
||||||
pub fn solve_part2(input: &Vec<Vec<Direction>>) -> usize {
|
pub fn solve_part2(input: &Vec<Vec<Direction>>) -> usize {
|
||||||
let mut seats = [[false;8];128];
|
let mut seats = [[false; 8]; 128];
|
||||||
for seat in input {
|
for seat in input {
|
||||||
let pos = seat_to_pos(seat);
|
let pos = seat_to_pos(seat);
|
||||||
seats[pos.1][pos.0]=true;
|
seats[pos.1][pos.0] = true;
|
||||||
}
|
}
|
||||||
for id in 0..(8*128) {
|
for id in 0..(8 * 128) {
|
||||||
let mut id=id;
|
let mut id = id;
|
||||||
let mut v=(false,false,false);
|
let mut v = (false, false, false);
|
||||||
v.0=seats[id/8][id%8];
|
v.0 = seats[id / 8][id % 8];
|
||||||
id+=1;
|
id += 1;
|
||||||
v.1=seats[id/8][id%8];
|
v.1 = seats[id / 8][id % 8];
|
||||||
id+=1;
|
id += 1;
|
||||||
v.2=seats[id/8][id%8];
|
v.2 = seats[id / 8][id % 8];
|
||||||
if v==(true,false,true) {
|
if v == (true, false, true) {
|
||||||
return id-1;
|
return id - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
panic!("Something went wrong!");
|
panic!("Something went wrong!");
|
||||||
|
|
Loading…
Reference in a new issue