feat: implement day 11 and fix day 10
This commit is contained in:
parent
575e692eb7
commit
f1c0c453d3
27
src/day10.rs
27
src/day10.rs
@ -87,7 +87,7 @@ pub fn execute_task02(content: &str) {
|
|||||||
let duration = start.elapsed();
|
let duration = start.elapsed();
|
||||||
|
|
||||||
//assert_eq!(957, command_steps);
|
//assert_eq!(957, command_steps);
|
||||||
println!("Day09 - Task02 - Duration: {duration:?} - Sum of B: {}", command_steps)
|
println!("Day10 - Task02 - Duration: {duration:?} - Caged Tiles: {}", command_steps)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -111,7 +111,7 @@ fn solve_02(content: &str) -> anyhow::Result<i32> {
|
|||||||
|
|
||||||
map[starting.1.0 as usize][starting.1.1 as usize] = starting.0;
|
map[starting.1.0 as usize][starting.1.1 as usize] = starting.0;
|
||||||
|
|
||||||
let from = (starting.1.0 + directions[0].0, starting.1.1 + directions[1].0);
|
let from = (starting.1.0 + directions[0].0, starting.1.1 + directions[0].1);
|
||||||
let mut pipe_network = vec![from ,starting.1];
|
let mut pipe_network = vec![from ,starting.1];
|
||||||
|
|
||||||
solve_pipeline(&map, &mut pipe_network);
|
solve_pipeline(&map, &mut pipe_network);
|
||||||
@ -125,22 +125,30 @@ fn solve_02(content: &str) -> anyhow::Result<i32> {
|
|||||||
.for_each(|(y, column)| column.iter()
|
.for_each(|(y, column)| column.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.for_each(|(x, pipe)| {
|
.for_each(|(x, pipe)| {
|
||||||
if pipe == &Pipe::Horizontal {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if pipe_network.contains(&(y as i32, x as i32)) {
|
if pipe_network.contains(&(y as i32, x as i32)) {
|
||||||
|
if pipe == &Pipe::Horizontal {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
match pipe {
|
match pipe {
|
||||||
Pipe::Vertical => is_in_pipe = !is_in_pipe,
|
Pipe::Vertical => is_in_pipe = !is_in_pipe,
|
||||||
Pipe::L => is_in_pipe = !is_in_pipe,
|
Pipe::L => {
|
||||||
Pipe::F => is_in_pipe = !is_in_pipe,
|
last_change = pipe.clone();
|
||||||
|
is_in_pipe = !is_in_pipe
|
||||||
|
},
|
||||||
|
Pipe::F => {
|
||||||
|
last_change = pipe.clone();
|
||||||
|
is_in_pipe = !is_in_pipe
|
||||||
|
},
|
||||||
Pipe::Pipe7 => {
|
Pipe::Pipe7 => {
|
||||||
if last_change != Pipe::F {
|
if last_change == Pipe::F {
|
||||||
is_in_pipe = !is_in_pipe
|
is_in_pipe = !is_in_pipe
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Pipe::J => {
|
Pipe::J => {
|
||||||
if last_change != Pipe::L {
|
if last_change == Pipe::L {
|
||||||
is_in_pipe = !is_in_pipe
|
is_in_pipe = !is_in_pipe
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -148,7 +156,6 @@ fn solve_02(content: &str) -> anyhow::Result<i32> {
|
|||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
if is_in_pipe {
|
if is_in_pipe {
|
||||||
println!("Find Tile: ({y},{x})");
|
|
||||||
size_of_caged_tiles += 1;
|
size_of_caged_tiles += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
140
src/day11.rs
Normal file
140
src/day11.rs
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
use std::cmp;
|
||||||
|
use std::time::Instant;
|
||||||
|
use itertools::Itertools;
|
||||||
|
use num::abs;
|
||||||
|
|
||||||
|
pub fn execute_task01(content: &str) {
|
||||||
|
let start = Instant::now();
|
||||||
|
let sum_of_b = solve_01(content).unwrap();
|
||||||
|
let duration = start.elapsed();
|
||||||
|
|
||||||
|
assert_eq!(10165598, sum_of_b);
|
||||||
|
println!("Day11 - Task01 - Duration: {duration:?} - Sum of closest Points: {}", sum_of_b)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn execute_task02(content: &str) {
|
||||||
|
let start = Instant::now();
|
||||||
|
let command_steps = solve_02(content).unwrap();
|
||||||
|
let duration = start.elapsed();
|
||||||
|
|
||||||
|
//assert_eq!(957, command_steps);
|
||||||
|
println!("Day11 - Task02 - Duration: {duration:?} - SUm of closest million Points: {}", command_steps)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn solve_01(content: &str) -> anyhow::Result<usize> {
|
||||||
|
solve(content, 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve_02(content: &str) -> anyhow::Result<usize> {
|
||||||
|
solve(content, 1_000_000)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve(content: &str, expansion: usize) -> anyhow::Result<usize> {
|
||||||
|
let height = content.lines().count();
|
||||||
|
let width = content.lines().next().unwrap().chars().count();
|
||||||
|
|
||||||
|
let mut galaxies = content
|
||||||
|
.lines()
|
||||||
|
.enumerate()
|
||||||
|
.flat_map(|(y, line)|
|
||||||
|
line
|
||||||
|
.chars()
|
||||||
|
.enumerate()
|
||||||
|
.filter_map(|(x, c)| {
|
||||||
|
if c == '#' {
|
||||||
|
return Some((y, x));
|
||||||
|
}
|
||||||
|
None
|
||||||
|
})
|
||||||
|
.collect::<Vec<(usize, usize)>>()
|
||||||
|
)
|
||||||
|
.collect::<Vec<(usize, usize)>>();
|
||||||
|
|
||||||
|
let mut empty_y: Vec<usize> = (0..height).collect();
|
||||||
|
let mut empty_x: Vec<usize> = (0..width).collect();
|
||||||
|
|
||||||
|
galaxies
|
||||||
|
.iter()
|
||||||
|
.for_each(|(y, x)| {
|
||||||
|
empty_y.retain(|value| *value != *y);
|
||||||
|
empty_x.retain(|value| *value != *x);
|
||||||
|
});
|
||||||
|
|
||||||
|
galaxies = galaxies
|
||||||
|
.iter()
|
||||||
|
.map(|(y, x)| {
|
||||||
|
(y + (empty_y.iter().filter(|filler| filler < &y).count() * (expansion - 1)), x + (empty_x.iter().filter(|filler| filler < &x).count() * (expansion - 1)))
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
Ok(galaxies.clone().iter()
|
||||||
|
.combinations(2)
|
||||||
|
.map(|data| (data[0], data[1]))
|
||||||
|
.map(|(from, to)| calculate_diff(from.clone(), to.clone()))
|
||||||
|
.sum())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn calculate_diff(from: (usize, usize), to: (usize, usize)) -> usize {
|
||||||
|
let min_y = cmp::min(from.0, to.0) as i32;
|
||||||
|
let min_x = cmp::min(from.1, to.1) as i32;
|
||||||
|
let max_y = cmp::max(from.0, to.0) as i32;
|
||||||
|
let max_x = cmp::max(from.1, to.1) as i32;
|
||||||
|
|
||||||
|
(abs(max_y - min_y) + abs(max_x - min_x)) as usize
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_solve_01() {
|
||||||
|
let example = r#"...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#....."#;
|
||||||
|
|
||||||
|
let result = solve_01(example).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(374, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_solve_02() {
|
||||||
|
let example = r#"...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#....."#;
|
||||||
|
|
||||||
|
let result = solve(example, 10).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(1030, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_solve_02_2() {
|
||||||
|
let example = r#"...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#....."#;
|
||||||
|
|
||||||
|
let result = solve(example, 100).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(8410, result);
|
||||||
|
}
|
140
src/input/day11/input.txt
Normal file
140
src/input/day11/input.txt
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
.#..........#.....................#........................................................#....................................#...........
|
||||||
|
...................#........................................#......................#........................................................
|
||||||
|
...........................................#......#..................#...................................................#..................
|
||||||
|
....#......................#...............................................#.........................#.....#......#................#........
|
||||||
|
.................................................................#.......................#..................................................
|
||||||
|
..............................................................................................................................#.............
|
||||||
|
.......#........#.............#...................................................#...................................#.....................
|
||||||
|
.........................#...................................#............................................................................#.
|
||||||
|
....................#.............#.........#..........................................#...............#....................................
|
||||||
|
.....................................................#...............#.............................................................#........
|
||||||
|
...........................................................................................................................#................
|
||||||
|
..........................................................#.........................................#...............#.......................
|
||||||
|
..............................................................................................#.............................................
|
||||||
|
.#........#........................#......#..............................................#..............................#...............#...
|
||||||
|
...............#......#...............................#.......#.........#......#.............................#.................#............
|
||||||
|
...............................#..............#.............................................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.........................#.......................................#..........................................................................
|
||||||
|
..................#........................#......................................#........................................#................
|
||||||
|
..................................................#.......#..............................................#........................#.......#.
|
||||||
|
...#........#........................#....................................#...............#.................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.......#........................#....................................................................................#......................
|
||||||
|
...............#...........#........................................................................#.......................................
|
||||||
|
.............................................#................#.........#.............................................................#.....
|
||||||
|
...........#...........................#................#...........................#.......................................................
|
||||||
|
..................................................#.......................................#.............#...................................
|
||||||
|
.....#..................#..........#..............................#.............................#........................................#..
|
||||||
|
..............................#...............................................................................................#.............
|
||||||
|
...................................................................................................................#........................
|
||||||
|
..............#..........................................#.............#...........................#..............................#.........
|
||||||
|
...#...................................#.........................................#..........................................................
|
||||||
|
..................#...................................................................#................................................#....
|
||||||
|
..........................#...................................#.........................................#...................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.........#...........#..........#..........................................#....................#..............#........#.....#...........#.
|
||||||
|
....................................................#.......................................................................................
|
||||||
|
.............................................#..............................................................................................
|
||||||
|
......................................#..................#..............................#...........#.......#...............................
|
||||||
|
............................#..................................#..............#.............................................................
|
||||||
|
...............#............................................................................................................................
|
||||||
|
...........................................#............................#.......................#...........................................
|
||||||
|
.....#..............#.................................................................................#...........................#.........
|
||||||
|
............................................................................................................................................
|
||||||
|
........................................#..........#.................#..........................................#...........................
|
||||||
|
.............................................#.................................#...........#................................................
|
||||||
|
...............................#.......................#...........................................#.......#....................#...........
|
||||||
|
#........#.............#...............................................................................................#...................#
|
||||||
|
.....................................#........................#..........#.........#........................................................
|
||||||
|
.................#............................................................................#.............................................
|
||||||
|
..........................#.......................................#.................................................#.......................
|
||||||
|
.....................................................#...................................#....................................#.............
|
||||||
|
..#.........................................................................................................................................
|
||||||
|
.............#.....#.......................#.............#....................................................#........................#....
|
||||||
|
......#........................................................................................#............................................
|
||||||
|
.................................#.................................#........................................................................
|
||||||
|
.................................................................................#.......................#................................#.
|
||||||
|
#.....................................................#...................................................................#.....#...........
|
||||||
|
.........#..................................................#......................................#........................................
|
||||||
|
..............................#.............#.................................................................#.......#.....................
|
||||||
|
........................#............................................................#......#................................#..............
|
||||||
|
.............#..............................................................................................................................
|
||||||
|
.....#........................................................#............#..........................#...........................#.........
|
||||||
|
...........................#......#.................................................................................#...................#...
|
||||||
|
.........#.....................................#...............................#............................................................
|
||||||
|
..................#.......................................#.......#................................#........................................
|
||||||
|
...............................#.....................#...................................#................................#.................
|
||||||
|
..............#..........................#.............................#............#.....................#.....................#.........#.
|
||||||
|
.................................................................................................................#..........................
|
||||||
|
......#.....................................................................................................................................
|
||||||
|
...........#.............#.........#........................................................................................................
|
||||||
|
...................................................................#..............#..................#......................................
|
||||||
|
..................#...........................................................................................#.............................
|
||||||
|
........#.................................#..............#.................................................................#..........#.....
|
||||||
|
...#.....................................................................#..............#.......#...........................................
|
||||||
|
............................................................................................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.................................#................#..........................................................#...............#.............#
|
||||||
|
..............#............................................................#................................................................
|
||||||
|
......#.....................#..........................#........#.....#............#..............#.........................................
|
||||||
|
....................#..................................................................................#..................#.................
|
||||||
|
....................................#.........#........................................................................................#....
|
||||||
|
..........................................................#..............#..................................................................
|
||||||
|
................#...............................................................................................#.............#.............
|
||||||
|
............................................................................................................................................
|
||||||
|
............................#...................#......#.............#..............................................#.......................
|
||||||
|
.............#...................................................................................#........................................#.
|
||||||
|
......................#..........................................................#.......#..................................................
|
||||||
|
#...........................................................#...............................................................................
|
||||||
|
.........#.........................#.................#....................................................#.................#...............
|
||||||
|
............................................................................................................................................
|
||||||
|
...................#.............................................#.....#....................................................................
|
||||||
|
........................#.........................#.....................................................................................#...
|
||||||
|
.....#........................................................................................................................#.............
|
||||||
|
.......................................#...............................................................#.........#..........................
|
||||||
|
............................#...........................#...........#......................#..............................#.......#.........
|
||||||
|
..#................................#...........#............................................................................................
|
||||||
|
.................#..................................#...................#...................................................................
|
||||||
|
..........#.................................................#................................................#..............................
|
||||||
|
.....................#...............................................................................#......................................
|
||||||
|
..............#..................#..............................#.............#....................................#.........#........#.....
|
||||||
|
...#.............................................................................................#..........................................
|
||||||
|
............................................#..........................................#....................................................
|
||||||
|
.........#...............................................#..............................................................#...................
|
||||||
|
................#.........#.................................................................................................................
|
||||||
|
.....#..................................#............................#..............................#........#..................#..........#
|
||||||
|
...............................#............................................................................................................
|
||||||
|
....................................................#........#..............................................................................
|
||||||
|
........#..........................#.........#...............................................................................#..............
|
||||||
|
....................................................................................................................#.......................
|
||||||
|
....................#........#......................................#.........#.....#.....#.................................................
|
||||||
|
................................................................................................................................#.....#.....
|
||||||
|
...............#..........................................#...............#...............................#.................................
|
||||||
|
...#..............................#.........................................................................................................
|
||||||
|
........................................................................................#............#....................................#.
|
||||||
|
............................................................................................................................#...............
|
||||||
|
...................................................................................#............................#...........................
|
||||||
|
#........#........#........#..........#.........#...........................................................................................
|
||||||
|
.............................................................#..............................#............................#..................
|
||||||
|
................................#.......................#...................................................................................
|
||||||
|
.......................#................................................#...............#.........#..................#................#.....
|
||||||
|
............#..................................................................#........................#...................................
|
||||||
|
............................................................................................................................................
|
||||||
|
......#.....................#.......#......#..............#......#..........................................................................
|
||||||
|
.....................#......................................................................................................................
|
||||||
|
................................#................................................#.............#...........................#.............#..
|
||||||
|
..............................................................................................................#.............................
|
||||||
|
............#............#..........................................................................#.............................#.........
|
||||||
|
.....#...........#.....................#.............................#.....#........................................#.......................
|
||||||
|
................................................#...........#..........................#....................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
#..........................#.....#................................................................#......................................#..
|
||||||
|
..........................................#.................................................................#.............#.................
|
||||||
|
................#.........................................................#.................................................................
|
||||||
|
.......#..............................#..............................................#..........................................#...........
|
||||||
|
........................#...................................#...............................................................................
|
||||||
|
............................................................................................................................#...............
|
||||||
|
..............................#.....................#.............................#...........#.................#...........................
|
||||||
|
...............................................#................#.....#................................................#....................
|
||||||
|
...................#...................#.................#.................#.........................#......................................
|
@ -9,6 +9,7 @@ mod day07;
|
|||||||
mod day08;
|
mod day08;
|
||||||
mod day09;
|
mod day09;
|
||||||
mod day10;
|
mod day10;
|
||||||
|
mod day11;
|
||||||
|
|
||||||
const CONTENT01: &'static str = include_str!("input/day01/input.txt");
|
const CONTENT01: &'static str = include_str!("input/day01/input.txt");
|
||||||
const CONTENT02: &'static str = include_str!("input/day02/input.txt");
|
const CONTENT02: &'static str = include_str!("input/day02/input.txt");
|
||||||
@ -20,6 +21,7 @@ const CONTENT07: &'static str = include_str!("input/day07/input.txt");
|
|||||||
const CONTENT08: &'static str = include_str!("input/day08/input.txt");
|
const CONTENT08: &'static str = include_str!("input/day08/input.txt");
|
||||||
const CONTENT09: &'static str = include_str!("input/day09/input.txt");
|
const CONTENT09: &'static str = include_str!("input/day09/input.txt");
|
||||||
const CONTENT10: &'static str = include_str!("input/day10/input.txt");
|
const CONTENT10: &'static str = include_str!("input/day10/input.txt");
|
||||||
|
const CONTENT11: &'static str = include_str!("input/day11/input.txt");
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
day01::execute_task01(CONTENT01);
|
day01::execute_task01(CONTENT01);
|
||||||
@ -51,4 +53,7 @@ fn main() {
|
|||||||
println!();
|
println!();
|
||||||
day10::execute_task01(CONTENT10);
|
day10::execute_task01(CONTENT10);
|
||||||
day10::execute_task02(CONTENT10);
|
day10::execute_task02(CONTENT10);
|
||||||
|
println!();
|
||||||
|
day11::execute_task01(CONTENT11);
|
||||||
|
day11::execute_task02(CONTENT11);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user