2023-11: Implement first part
This commit is contained in:
parent
e0d5d12847
commit
5616c7212c
|
@ -0,0 +1,140 @@
|
||||||
|
..........................#.........................#........................................................#..............................
|
||||||
|
.............#.....................................................#.........#......................#.......................................
|
||||||
|
..................................#....................................................................................#...........#........
|
||||||
|
....................#..........................#..................................................................#.........................
|
||||||
|
.......................................................#...............................................................................#....
|
||||||
|
.....................................#.........................#......#..............#......................................................
|
||||||
|
........#...............#......................................................#..........#................................#...............#
|
||||||
|
.........................................#................#..............................................#............#.....................
|
||||||
|
....#............................#..........................................................................................................
|
||||||
|
............#......................................#..............................................#............#............................
|
||||||
|
......................#.....................................................................#...............................................
|
||||||
|
.............................................................................#........#.........................................#...........
|
||||||
|
.................#.....................................................#.................................................#..............#...
|
||||||
|
................................#....................#.................................................#....................................
|
||||||
|
.......................................#.............................................................................#......................
|
||||||
|
..#.....................#...................................................................................................................
|
||||||
|
............................................#.....................#...........#.....................#.......................................
|
||||||
|
..................................................................................................................#..................#......
|
||||||
|
....................................#....................#................................................................................#.
|
||||||
|
.........#.....................................#..............#......................#......................................#...............
|
||||||
|
..............#..........................................................#......................#.....#.....................................
|
||||||
|
.......................................................................................................................................#....
|
||||||
|
..................................................................#.........................#...................#...........................
|
||||||
|
....#............................#.....#.....................................#................................................#.............
|
||||||
|
.......................#..........................#.........................................................................................
|
||||||
|
..................................................................................#.....#...................#.............#.................
|
||||||
|
................#.............................................#.................................#...........................................
|
||||||
|
#.....................................................................................................#...................................#.
|
||||||
|
...........#..............#.....#.............#.....................................................................#.......................
|
||||||
|
...........................................................................#................#.....................................#.........
|
||||||
|
...................................................#........................................................................................
|
||||||
|
..............#....................................................................................#........................................
|
||||||
|
.....................................#................................................#.......................#.............................
|
||||||
|
.....................................................................................................................................#.....#
|
||||||
|
........#................#....................................#.................................#.........#.................................
|
||||||
|
....................................................#..............#............#....................................#......................
|
||||||
|
....#...............#........#..........................................................#.......................................#...........
|
||||||
|
..........................................#.....#.......................#..........................#.....................................#..
|
||||||
|
.......................................................#....................................................................................
|
||||||
|
#......#...................................................................................................................#................
|
||||||
|
............#...............................................................................#..........#..........................#.........
|
||||||
|
............................................................................................................#...............................
|
||||||
|
.....................................#....................#........#............................#...........................................
|
||||||
|
........................#...........................................................#................................#....................#.
|
||||||
|
......#...............................................#.....................#........................#......................................
|
||||||
|
.................................#.....................................#..................................................#.................
|
||||||
|
...................#......................#..................#..........................#.............................................#.....
|
||||||
|
.............................#.....................#..............#...........................................#.............................
|
||||||
|
.........................................................#.......................................................................#..........
|
||||||
|
...............................................................................#.......................#.................................#..
|
||||||
|
............................................................................................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.................#.............................................................................................#.......#.............#......
|
||||||
|
....#.....#....................................................#........#...............#....................................#..............
|
||||||
|
..................................#..........#........................................................#.....................................
|
||||||
|
............................................................................................................................................
|
||||||
|
...................#..............................................................................#......................#..................
|
||||||
|
............................................................................................................................................
|
||||||
|
..#..............................................#......#.....#...........................#..............#....................#.............
|
||||||
|
................#......#.........#..........................................................................................................
|
||||||
|
.........................................................................#......................................#.........................#.
|
||||||
|
....................................................#..............#............................#...........................................
|
||||||
|
.....#....................#..........................................................................#......................................
|
||||||
|
............#...........................#......#............................................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.....................#.........................................................#.........................#........#.............#...........
|
||||||
|
.........#..............................................................#.....................#..........................................#..
|
||||||
|
......................................#...........#.....................................#...................................................
|
||||||
|
.#...............................#..........................................................................................................
|
||||||
|
..............#............#....................................#..................................#........................#...............
|
||||||
|
.....................................................................#...........................................#..........................
|
||||||
|
............................................................................................................................................
|
||||||
|
.........#........#........................#.....#........................#.......................................................#.....#...
|
||||||
|
............................................................................................................................................
|
||||||
|
...................................#........................................................................................................
|
||||||
|
..............#..........#..............#....................................#..........#.....#.............................................
|
||||||
|
....#........................................#............#...................................................................#.............
|
||||||
|
............................................................................................................................................
|
||||||
|
#........#......................................................#........#.................................................................#
|
||||||
|
....................#.........#..........................................................................#.......#......#...................
|
||||||
|
............................................................................................................................................
|
||||||
|
.......................................#..............#...........................................#.........................................
|
||||||
|
................................................#.............................................................#.......................#.....
|
||||||
|
.......................#...................#..............................#.................................................................
|
||||||
|
...............#...................#....................................................#.............................#.....................
|
||||||
|
....#......................................................................................................#................................
|
||||||
|
.............................#.........................................#....................#.............................#.....#...........
|
||||||
|
..............................................#..................................................#...................................#......
|
||||||
|
...................#...................#..........................................#.................................#.......................
|
||||||
|
............#.....................#....................#..................#.................................................................
|
||||||
|
...........................................#........................................................#.......................................
|
||||||
|
...........................................................................................................#................................
|
||||||
|
...#............................................................#.............................................................#.............
|
||||||
|
.........................#..............................................................#................................................#..
|
||||||
|
...............#............................................................................................................................
|
||||||
|
.......................................#.......#.............#..............................................................................
|
||||||
|
.....................#...........#.............................................#............#.................#.........#...........#.......
|
||||||
|
..........................................................................#.......................#.........................................
|
||||||
|
.......#............................................................................#.......................................................
|
||||||
|
....................................................#....................................................................................#..
|
||||||
|
.................#........................................#.....#...........................................................#...............
|
||||||
|
.#.........#..................................#.................................#..............#.........#.....#......#.....................
|
||||||
|
.....................#............#.......................................................#.........#.......................................
|
||||||
|
............................................................................#.......................................................#.......
|
||||||
|
.....................................................................................#....................................#.................
|
||||||
|
............................#................................................................#..................................#...........
|
||||||
|
.....#.........................................................#............................................................................
|
||||||
|
......................#..................#............................................................................#.....................
|
||||||
|
................................................................................#.....................................................#.....
|
||||||
|
#.................................#.......................................#.................................................................
|
||||||
|
...................#......#.......................#...............#...........................................#.............................
|
||||||
|
.............................................................#........................................#......................#..............
|
||||||
|
.................................................................................................#..........................................
|
||||||
|
..#..................................#....................................................................#......#..................#.......
|
||||||
|
..........................................................#..................#........................................#.....................
|
||||||
|
..................#........#........................................................#..........................................#............
|
||||||
|
.................................#.............#.......................#...................................................................#
|
||||||
|
................................................................................................#.........................#.................
|
||||||
|
....#.....#.................................................................................................................................
|
||||||
|
.......................#....................................................#...............................................................
|
||||||
|
....................................................#.......................................................................................
|
||||||
|
.............#..............................#..........................................#....................................................
|
||||||
|
...............................#............................................................................................#........#......
|
||||||
|
.#.......................................................#.........#...........#.................................#..........................
|
||||||
|
....................................#.............#..............................................................................#..........
|
||||||
|
.....................#.........................................................................#......#.....................................
|
||||||
|
..........................#...........................#.........#.................#.........................................................
|
||||||
|
..........#.................................#................................#..............................................................
|
||||||
|
....#...........................................................................................................#..................#........
|
||||||
|
........................................................................#..............#.....................................#..............
|
||||||
|
..................#.......................................#.................................................................................
|
||||||
|
........................................................................................................................................#...
|
||||||
|
....................................................#.......................#..........................#....................................
|
||||||
|
.....#..............................#.........................#..................................#..........................................
|
||||||
|
..........................#............................................#........................................#.......#...................
|
||||||
|
..........................................#.................................................................................................
|
||||||
|
......................................................................................................................................#.....
|
||||||
|
.......#...........................................#................................#........................................#..............
|
||||||
|
#..................#..........................#..........................#.....#............................#...............................
|
||||||
|
...................................#.....................................................................................#..................
|
|
@ -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!();}
|
||||||
|
}
|
|
@ -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 {
|
||||||
|
|
|
@ -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 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String::from("Not implemented")
|
let mut total_distance = 0;
|
||||||
|
for i in 0..(galaxies.len() - 1) {
|
||||||
|
total_distance += distances_from_galaxy(i, &galaxies);
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
}
|
}
|
Loading…
Reference in New Issue