feat: implement day 11 and fix day 10

This commit is contained in:
Lennard Brinkhaus 2023-12-11 13:59:21 +01:00
parent 575e692eb7
commit f1c0c453d3
4 changed files with 302 additions and 10 deletions

View File

@ -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
View 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
View File

@ -0,0 +1,140 @@
.#..........#.....................#........................................................#....................................#...........
...................#........................................#......................#........................................................
...........................................#......#..................#...................................................#..................
....#......................#...............................................#.........................#.....#......#................#........
.................................................................#.......................#..................................................
..............................................................................................................................#.............
.......#........#.............#...................................................#...................................#.....................
.........................#...................................#............................................................................#.
....................#.............#.........#..........................................#...............#....................................
.....................................................#...............#.............................................................#........
...........................................................................................................................#................
..........................................................#.........................................#...............#.......................
..............................................................................................#.............................................
.#........#........................#......#..............................................#..............................#...............#...
...............#......#...............................#.......#.........#......#.............................#.................#............
...............................#..............#.............................................................................................
............................................................................................................................................
.........................#.......................................#..........................................................................
..................#........................#......................................#........................................#................
..................................................#.......#..............................................#........................#.......#.
...#........#........................#....................................#...............#.................................................
............................................................................................................................................
.......#........................#....................................................................................#......................
...............#...........#........................................................................#.......................................
.............................................#................#.........#.............................................................#.....
...........#...........................#................#...........................#.......................................................
..................................................#.......................................#.............#...................................
.....#..................#..........#..............................#.............................#........................................#..
..............................#...............................................................................................#.............
...................................................................................................................#........................
..............#..........................................#.............#...........................#..............................#.........
...#...................................#.........................................#..........................................................
..................#...................................................................#................................................#....
..........................#...................................#.........................................#...................................
............................................................................................................................................
.........#...........#..........#..........................................#....................#..............#........#.....#...........#.
....................................................#.......................................................................................
.............................................#..............................................................................................
......................................#..................#..............................#...........#.......#...............................
............................#..................................#..............#.............................................................
...............#............................................................................................................................
...........................................#............................#.......................#...........................................
.....#..............#.................................................................................#...........................#.........
............................................................................................................................................
........................................#..........#.................#..........................................#...........................
.............................................#.................................#...........#................................................
...............................#.......................#...........................................#.......#....................#...........
#........#.............#...............................................................................................#...................#
.....................................#........................#..........#.........#........................................................
.................#............................................................................#.............................................
..........................#.......................................#.................................................#.......................
.....................................................#...................................#....................................#.............
..#.........................................................................................................................................
.............#.....#.......................#.............#....................................................#........................#....
......#........................................................................................#............................................
.................................#.................................#........................................................................
.................................................................................#.......................#................................#.
#.....................................................#...................................................................#.....#...........
.........#..................................................#......................................#........................................
..............................#.............#.................................................................#.......#.....................
........................#............................................................#......#................................#..............
.............#..............................................................................................................................
.....#........................................................#............#..........................#...........................#.........
...........................#......#.................................................................................#...................#...
.........#.....................................#...............................#............................................................
..................#.......................................#.......#................................#........................................
...............................#.....................#...................................#................................#.................
..............#..........................#.............................#............#.....................#.....................#.........#.
.................................................................................................................#..........................
......#.....................................................................................................................................
...........#.............#.........#........................................................................................................
...................................................................#..............#..................#......................................
..................#...........................................................................................#.............................
........#.................................#..............#.................................................................#..........#.....
...#.....................................................................#..............#.......#...........................................
............................................................................................................................................
............................................................................................................................................
.................................#................#..........................................................#...............#.............#
..............#............................................................#................................................................
......#.....................#..........................#........#.....#............#..............#.........................................
....................#..................................................................................#..................#.................
....................................#.........#........................................................................................#....
..........................................................#..............#..................................................................
................#...............................................................................................#.............#.............
............................................................................................................................................
............................#...................#......#.............#..............................................#.......................
.............#...................................................................................#........................................#.
......................#..........................................................#.......#..................................................
#...........................................................#...............................................................................
.........#.........................#.................#....................................................#.................#...............
............................................................................................................................................
...................#.............................................#.....#....................................................................
........................#.........................#.....................................................................................#...
.....#........................................................................................................................#.............
.......................................#...............................................................#.........#..........................
............................#...........................#...........#......................#..............................#.......#.........
..#................................#...........#............................................................................................
.................#..................................#...................#...................................................................
..........#.................................................#................................................#..............................
.....................#...............................................................................#......................................
..............#..................#..............................#.............#....................................#.........#........#.....
...#.............................................................................................#..........................................
............................................#..........................................#....................................................
.........#...............................................#..............................................................#...................
................#.........#.................................................................................................................
.....#..................................#............................#..............................#........#..................#..........#
...............................#............................................................................................................
....................................................#........#..............................................................................
........#..........................#.........#...............................................................................#..............
....................................................................................................................#.......................
....................#........#......................................#.........#.....#.....#.................................................
................................................................................................................................#.....#.....
...............#..........................................#...............#...............................#.................................
...#..............................#.........................................................................................................
........................................................................................#............#....................................#.
............................................................................................................................#...............
...................................................................................#............................#...........................
#........#........#........#..........#.........#...........................................................................................
.............................................................#..............................#............................#..................
................................#.......................#...................................................................................
.......................#................................................#...............#.........#..................#................#.....
............#..................................................................#........................#...................................
............................................................................................................................................
......#.....................#.......#......#..............#......#..........................................................................
.....................#......................................................................................................................
................................#................................................#.............#...........................#.............#..
..............................................................................................................#.............................
............#............#..........................................................................#.............................#.........
.....#...........#.....................#.............................#.....#........................................#.......................
................................................#...........#..........................#....................................................
............................................................................................................................................
#..........................#.....#................................................................#......................................#..
..........................................#.................................................................#.............#.................
................#.........................................................#.................................................................
.......#..............................#..............................................#..........................................#...........
........................#...................................#...............................................................................
............................................................................................................................#...............
..............................#.....................#.............................#...........#.................#...........................
...............................................#................#.....#................................................#....................
...................#...................#.................#.................#.........................#......................................

View File

@ -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);
} }