chore: fmt + clippy

This commit is contained in:
Xavier Morel
2024-12-03 21:03:06 +01:00
parent 0171de3589
commit 723001fd5b

View File

@@ -3,7 +3,7 @@ advent_of_code::solution!(13);
#[derive(PartialEq)] #[derive(PartialEq)]
enum Type { enum Type {
Wall, Wall,
Empty Empty,
} }
#[derive(Debug, PartialEq, Clone)] #[derive(Debug, PartialEq, Clone)]
@@ -26,12 +26,8 @@ impl Pos {
Self { x: 31, y: 39 } Self { x: 31, y: 39 }
} }
fn get_type(&self, nbr: u32) -> Type { fn get_type(&self, nbr: u32) -> Type {
let nb: u32 = self.x * self.x let nb: u32 =
+ 3 * self.x self.x * self.x + 3 * self.x + 2 * self.x * self.y + self.y + self.y * self.y + nbr;
+ 2 * self.x * self.y
+ self.y
+ self.y * self.y
+ nbr;
if nb.count_ones() & 1 == 1 { if nb.count_ones() & 1 == 1 {
Type::Wall Type::Wall
} else { } else {
@@ -62,22 +58,19 @@ fn walk_around(paths: Vec<Vec<Pos>>, known: &mut Vec<Pos>, nbr: u32) -> Vec<Vec<
let mut to_add: Vec<Pos> = Vec::new(); let mut to_add: Vec<Pos> = Vec::new();
let new_paths: Vec<Vec<Pos>> = paths let new_paths: Vec<Vec<Pos>> = paths
.into_iter() .into_iter()
.flat_map( .flat_map(|path| {
|path| { path[0]
let ps = path[0] .empty_neighbors(nbr)
.empty_neighbors(nbr) .into_iter()
.into_iter() .filter(|p| !known.contains(p))
.filter(|p| !known.contains(p)) .map(|h| {
.map(|h| { to_add.push(h.clone());
to_add.push(h.clone()); let mut p = vec![h];
let mut p = vec![h]; p.extend(path.clone());
p.extend(path.clone()); p
p })
}) .collect::<Vec<Vec<Pos>>>()
.collect::<Vec<Vec<Pos>>>(); })
ps
}
)
.collect::<Vec<Vec<Pos>>>(); .collect::<Vec<Vec<Pos>>>();
known.append(&mut to_add); known.append(&mut to_add);
new_paths new_paths
@@ -95,18 +88,17 @@ fn search_for_pos(paths: Vec<Vec<Pos>>, known: &mut Vec<Pos>, nbr: u32, dest: Po
fn take_n_steps(paths: Vec<Vec<Pos>>, known: &mut Vec<Pos>, nbr: u32, steps: usize) { fn take_n_steps(paths: Vec<Vec<Pos>>, known: &mut Vec<Pos>, nbr: u32, steps: usize) {
if steps > 0 { if steps > 0 {
take_n_steps( take_n_steps(walk_around(paths, known, nbr), known, nbr, steps - 1)
walk_around(paths, known, nbr),
known,
nbr,
steps - 1
)
} }
} }
fn print_maze(path: &Vec<Pos>, nbr: u32) { fn print_maze(path: &[Pos], nbr: u32) {
let origin = Pos::origin(); let origin = Pos::origin();
let end = if nbr == 10 { Pos::dest_test() } else { Pos::dest() }; let end = if nbr == 10 {
Pos::dest_test()
} else {
Pos::dest()
};
for y in 0..50 { for y in 0..50 {
for x in 0..80 { for x in 0..80 {
let p = Pos::init(x, y); let p = Pos::init(x, y);
@@ -123,17 +115,25 @@ fn print_maze(path: &Vec<Pos>, nbr: u32) {
} }
} }
} }
println!(""); println!();
} }
println!(""); println!();
} }
pub fn part_one(input: &str) -> Option<usize> { pub fn part_one(input: &str) -> Option<usize> {
let nbr = input.strip_suffix("\n").unwrap_or(input).parse::<u32>().unwrap(); let nbr = input
.strip_suffix("\n")
.unwrap_or(input)
.parse::<u32>()
.unwrap();
let initial_path = vec![vec![Pos::origin()]]; let initial_path = vec![vec![Pos::origin()]];
let mut known = vec![Pos::origin()]; let mut known = vec![Pos::origin()];
let dest = if nbr == 10 { Pos::dest_test() } else { Pos::dest() }; let dest = if nbr == 10 {
Pos::dest_test()
} else {
Pos::dest()
};
let path = search_for_pos(initial_path, &mut known, nbr, dest); let path = search_for_pos(initial_path, &mut known, nbr, dest);
print_maze(&path, nbr); print_maze(&path, nbr);
@@ -141,11 +141,14 @@ pub fn part_one(input: &str) -> Option<usize> {
} }
pub fn part_two(input: &str) -> Option<usize> { pub fn part_two(input: &str) -> Option<usize> {
let nbr = input.strip_suffix("\n").unwrap_or(input).parse::<u32>().unwrap(); let nbr = input
.strip_suffix("\n")
.unwrap_or(input)
.parse::<u32>()
.unwrap();
let initial_path = vec![vec![Pos::origin()]]; let initial_path = vec![vec![Pos::origin()]];
let mut known = vec![Pos::origin()]; let mut known = vec![Pos::origin()];
let dest = if nbr == 10 { Pos::dest_test() } else { Pos::dest() };
take_n_steps(initial_path, &mut known, nbr, 51); take_n_steps(initial_path, &mut known, nbr, 51);
print_maze(&known, nbr); print_maze(&known, nbr);