2023-11: Implement first part

This commit is contained in:
Mathis 2023-12-22 13:24:51 +01:00
parent e0d5d12847
commit 5616c7212c
4 changed files with 198 additions and 9 deletions

140
input/2023/day_11/input.txt Normal file
View File

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

View File

@ -0,0 +1,15 @@
pub struct Galaxy {
pub i: usize,
pub j: usize,
}
pub fn all_false(vector: &Vec<bool>) -> bool {
vector.iter().all(|x| *x == false)
}
#[allow(dead_code)]
pub fn print_matrix(matrix: &Vec<Vec<bool>>) {
for row in matrix {
row.iter().for_each(|x| print!("{}", if *x { '#' } else { '.' }));
println!();}
}

View File

@ -1,6 +1,6 @@
pub mod part_one; pub mod part_one;
//pub mod part_two; //pub mod part_two;
//pub mod common; pub mod common;
use crate::utils::solution::Solution; use crate::utils::solution::Solution;
use crate::utils::input_reader; use crate::utils::input_reader;
@ -11,7 +11,7 @@ pub struct DaySolution ;
impl Solution for DaySolution { impl Solution for DaySolution {
fn input_path(&self) -> &'static str { fn input_path(&self) -> &'static str {
"input/2023/day_11/input_test.txt" "input/2023/day_11/input.txt"
} }
fn part_one(&self) -> String { fn part_one(&self) -> String {

View File

@ -1,23 +1,35 @@
use super::common::{all_false, Galaxy};
pub fn part_one(input_lines: Vec<String>) -> String { pub fn part_one(input_lines: Vec<String>) -> String {
let vert_dim = input_lines.len(); let vert_dim = input_lines.len();
let horz_dim = input_lines[0].len(); let horz_dim = input_lines[0].len();
let mut matrix = vec![vec![false; horz_dim]; vert_dim]; let mut matrix = vec![vec![false; horz_dim]; vert_dim];
let mut galaxies: Vec<Galaxy> = Vec::new();
for (y, line) in input_lines.iter().enumerate() { for (y, line) in input_lines.iter().enumerate() {
for (x, c) in line.chars().enumerate() { for (x, c) in line.chars().enumerate() {
matrix[x][y] = c == '#'; matrix[y][x] = c == '#';
} }
} }
println!("Pre-expand dims: {:?}, {:?}", matrix.len(), matrix[0].len());
expand_rows(&mut matrix); expand_rows(&mut matrix);
expand_cols(&mut matrix); expand_cols(&mut matrix);
println!("Post-expand dims: {:?}, {:?}", matrix.len(), matrix[0].len()); for x in 0..matrix.len() {
for y in 0..matrix[x].len() {
if matrix[x][y] {
galaxies.push(Galaxy { i: x, j: y });
}
}
}
let mut total_distance = 0;
for i in 0..(galaxies.len() - 1) {
total_distance += distances_from_galaxy(i, &galaxies);
}
String::from("Not implemented") total_distance.to_string()
} }
fn expand_rows(matrix: &mut Vec<Vec<bool>>) { fn expand_rows(matrix: &mut Vec<Vec<bool>>) {
@ -46,6 +58,28 @@ fn expand_cols(matrix: &mut Vec<Vec<bool>>) {
} }
} }
fn all_false(vector: &Vec<bool>) -> bool { fn distances_from_galaxy(id : usize, galaxies: &Vec<Galaxy>) -> usize {
vector.iter().all(|x| *x == false) let mut distance: usize = 0;
for i in (id + 1)..galaxies.len() {
distance += euclidian_distance(galaxies[id].i, galaxies[id].j, galaxies[i].i, galaxies[i].j);
}
distance
}
fn euclidian_distance(x1: usize, y1: usize, x2: usize, y2: usize) -> usize {
let x;
if x1 > x2 {
x = x1 - x2;
} else {
x = x2 - x1;
}
let y;
if y1 > y2 {
y = y1 - y2;
} else {
y = y2 - y1;
}
x + y
} }