Day 11 complete
This commit is contained in:
parent
f09ab515bb
commit
31cdd8b327
86
src/11part1.rs
Normal file
86
src/11part1.rs
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
use std::fs;
|
||||||
|
|
||||||
|
#[derive(Eq, PartialEq, Hash, Copy, Clone, Debug)]
|
||||||
|
struct Coordinate {
|
||||||
|
x: usize,
|
||||||
|
y: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let file_path = "input/11input.txt";
|
||||||
|
let contents = fs::read_to_string(file_path).expect("should read file");
|
||||||
|
let mut lines = contents.lines();
|
||||||
|
let mut matrix: Vec<Vec<char>> = Vec::new();
|
||||||
|
loop {
|
||||||
|
match lines.next() {
|
||||||
|
Some(line) => {
|
||||||
|
matrix.push(line.chars().collect());
|
||||||
|
},
|
||||||
|
None => break,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut matrix_expanded: Vec<Vec<char>> = Vec::new();
|
||||||
|
let mut matrix_expanded_full: Vec<Vec<char>> = Vec::new();
|
||||||
|
for y in 0..matrix.len() {
|
||||||
|
let mut has_galaxy = false;
|
||||||
|
for x in 0..matrix[y].len() {
|
||||||
|
has_galaxy = has_galaxy || matrix[y][x] == '#';
|
||||||
|
}
|
||||||
|
if !has_galaxy {
|
||||||
|
matrix_expanded.push(matrix[y].to_owned());
|
||||||
|
matrix_expanded.push(matrix[y].to_owned());
|
||||||
|
matrix_expanded_full.push(Vec::new());
|
||||||
|
matrix_expanded_full.push(Vec::new());
|
||||||
|
} else {
|
||||||
|
matrix_expanded.push(matrix[y].to_owned());
|
||||||
|
matrix_expanded_full.push(Vec::new());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for x in 0..matrix_expanded[0].len() {
|
||||||
|
let mut has_galaxy = false;
|
||||||
|
for y in 0..matrix_expanded.len() {
|
||||||
|
has_galaxy = has_galaxy || matrix_expanded[y][x] == '#';
|
||||||
|
}
|
||||||
|
if has_galaxy {
|
||||||
|
for y in 0..matrix_expanded.len() {
|
||||||
|
matrix_expanded_full[0].push(matrix_expanded[y][x]);
|
||||||
|
matrix_expanded_full.push(matrix_expanded_full[0].to_owned());
|
||||||
|
matrix_expanded_full.remove(0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for _y in 0..matrix_expanded.len() {
|
||||||
|
matrix_expanded_full[0].push('.');
|
||||||
|
matrix_expanded_full[0].push('.');
|
||||||
|
matrix_expanded_full.push(matrix_expanded_full[0].to_owned());
|
||||||
|
matrix_expanded_full.remove(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut coordinates = Vec::new();
|
||||||
|
for y in 0..matrix_expanded_full.len() {
|
||||||
|
for x in 0..matrix_expanded_full[y].len() {
|
||||||
|
if matrix_expanded_full[y][x] == '#' {
|
||||||
|
coordinates.push(Coordinate{x, y});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut sum = 0;
|
||||||
|
for a in 0..coordinates.len()-1 {
|
||||||
|
for b in a+1..coordinates.len() {
|
||||||
|
if coordinates[a].x > coordinates[b].x {
|
||||||
|
if coordinates[a].y > coordinates[b].y {
|
||||||
|
sum += coordinates[a].x - coordinates[b].x + coordinates[a].y - coordinates[b].y;
|
||||||
|
} else {
|
||||||
|
sum += coordinates[a].x - coordinates[b].x + coordinates[b].y - coordinates[a].y;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if coordinates[a].y > coordinates[b].y {
|
||||||
|
sum += coordinates[b].x - coordinates[a].x + coordinates[a].y - coordinates[b].y;
|
||||||
|
} else {
|
||||||
|
sum += coordinates[b].x - coordinates[a].x + coordinates[b].y - coordinates[a].y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{}", sum);
|
||||||
|
}
|
77
src/11part2.rs
Normal file
77
src/11part2.rs
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
use std::fs;
|
||||||
|
|
||||||
|
#[derive(Eq, PartialEq, Hash, Copy, Clone, Debug)]
|
||||||
|
struct Coordinate {
|
||||||
|
x: usize,
|
||||||
|
y: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let file_path = "input/11input.txt";
|
||||||
|
let contents = fs::read_to_string(file_path).expect("should read file");
|
||||||
|
let mut lines = contents.lines();
|
||||||
|
let mut matrix: Vec<Vec<char>> = Vec::new();
|
||||||
|
loop {
|
||||||
|
match lines.next() {
|
||||||
|
Some(line) => {
|
||||||
|
matrix.push(line.chars().collect());
|
||||||
|
},
|
||||||
|
None => break,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut coordinates = Vec::new();
|
||||||
|
let mut coordinates_copy = Vec::new();
|
||||||
|
for y in 0..matrix.len() {
|
||||||
|
for x in 0..matrix[y].len() {
|
||||||
|
if matrix[y][x] == '#' {
|
||||||
|
coordinates.push(Coordinate{x, y});
|
||||||
|
coordinates_copy.push(Coordinate{x, y});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for y in 0..matrix.len() {
|
||||||
|
let mut has_galaxy = false;
|
||||||
|
for x in 0..matrix[y].len() {
|
||||||
|
has_galaxy = has_galaxy || matrix[y][x] == '#';
|
||||||
|
}
|
||||||
|
if !has_galaxy {
|
||||||
|
for c in 0..coordinates.len() {
|
||||||
|
if coordinates[c].y > y {
|
||||||
|
coordinates_copy[c].y += 999999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for x in 0..matrix[0].len() {
|
||||||
|
let mut has_galaxy = false;
|
||||||
|
for y in 0..matrix.len() {
|
||||||
|
has_galaxy = has_galaxy || matrix[y][x] == '#';
|
||||||
|
}
|
||||||
|
if !has_galaxy {
|
||||||
|
for c in 0..coordinates.len() {
|
||||||
|
if coordinates[c].x > x {
|
||||||
|
coordinates_copy[c].x += 999999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut sum = 0;
|
||||||
|
for a in 0..coordinates_copy.len()-1 {
|
||||||
|
for b in a+1..coordinates_copy.len() {
|
||||||
|
if coordinates_copy[a].x > coordinates_copy[b].x {
|
||||||
|
if coordinates_copy[a].y > coordinates_copy[b].y {
|
||||||
|
sum += coordinates_copy[a].x - coordinates_copy[b].x + coordinates_copy[a].y - coordinates_copy[b].y;
|
||||||
|
} else {
|
||||||
|
sum += coordinates_copy[a].x - coordinates_copy[b].x + coordinates_copy[b].y - coordinates_copy[a].y;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if coordinates_copy[a].y > coordinates_copy[b].y {
|
||||||
|
sum += coordinates_copy[b].x - coordinates_copy[a].x + coordinates_copy[a].y - coordinates_copy[b].y;
|
||||||
|
} else {
|
||||||
|
sum += coordinates_copy[b].x - coordinates_copy[a].x + coordinates_copy[b].y - coordinates_copy[a].y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{}", sum);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user