Advent 2023 Day 11
This commit is contained in:
parent
c7bd0f6e10
commit
7865e624c5
3 changed files with 301 additions and 0 deletions
140
advent_of_code_2023/day11/input.txt
Normal file
140
advent_of_code_2023/day11/input.txt
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
.......#..............#.......................#............#.......#........................#.....#..................................#......
|
||||
.................................#.................................................#........................................................
|
||||
............................................................................................................................................
|
||||
..........................................................................................................#.............#...................
|
||||
...........#...............................................................#..............................................................#.
|
||||
.#..........................................................................................................................................
|
||||
................#.......#........................#....................#....................#.................................#..............
|
||||
......................................#.....#.........................................................#.....................................
|
||||
...................................................................................#..........................#......................#......
|
||||
......#.....................................................................................................................................
|
||||
.............#............................................#.......................................................#.........................
|
||||
..................#.....................#..........#.....................................................#..............#.....#.............
|
||||
.................................................................#.........#................................................................
|
||||
..................................#.................................................................................................#......#
|
||||
....#..........#...........#..........................#.....#................................................#..............................
|
||||
................................................................................#...........................................................
|
||||
.......................................#........#.......................#...........................#.......................................
|
||||
.......................................................................................................................................#....
|
||||
.#..............................#.......................#........#.................#..............................#.........................
|
||||
......#..............#....................#............................................................#.................#..................
|
||||
............#...............................................................................................................................
|
||||
.....................................................................................................................#......................
|
||||
.....................................................#...................................................................................#..
|
||||
...............................................#...........................#.....#..........................................................
|
||||
....................................#........................................................................#..............................
|
||||
...........#.................#.........................................................#...........#............................#...........
|
||||
.....#...............#....................................#...................................#........................................#....
|
||||
..........................................................................................................#................#................
|
||||
.......................................#..............#....................................................................................#
|
||||
.................................#................................................#...................#.............#.......................
|
||||
...#........#...............#.....................#............#.................................#.............#............................
|
||||
............................................................................................................................................
|
||||
.............................................#........................#.....................................................................
|
||||
..........................................................#................................................#..............................#.
|
||||
...................#...................#........................................#..............................................#............
|
||||
....#.....#.......................#...........................................................#.....#.......................................
|
||||
........................................................................................#...................................................
|
||||
..............................................#.........................................................#...................................
|
||||
..........................#................................................#.............................................#..............#...
|
||||
........#.....................................................#.......#..........................................................#..........
|
||||
.............#.............................#..........#..............................#.....................#................................
|
||||
............................................................................................................................................
|
||||
.#..............................................................................#.................#.........................................
|
||||
......................#...............#.....................................................................................................
|
||||
...................................................................#..................................................................#.....
|
||||
..........#.................................................................................#......................#........................
|
||||
.................#........................#............................#....................................................................
|
||||
..........................................................#................................................#............#...................
|
||||
..................................................#........................#...................................................#............
|
||||
..............................................................................................#..................#..........................
|
||||
............................................................................................................................................
|
||||
.....#...............................................................................................#......................................
|
||||
....................................#.......................................................................#........#......................
|
||||
...................#............................................................#..........#................................................
|
||||
.............................#..........................................................................................................#...
|
||||
...............#...............................#..........#......................................#.....#.....................#..............
|
||||
.......#...............#.............................................................#............................................#.........
|
||||
............................................................................................................................................
|
||||
...................................#.......#........#........#.................................................#............................
|
||||
............................................................................................................................................
|
||||
..........#..................#.........................................#..............................................................#.....
|
||||
................................................#..........................................#................#....................#..........
|
||||
.........................................................#...........................#......................................................
|
||||
#....................#...........#.................................................................#..............#......#..................
|
||||
.............................................#.......#...................................................#..................................
|
||||
............................#...........................................................#.....#.............................................
|
||||
.......#........................................................................#...........................................................
|
||||
..........................................................#...................................................#....................#........
|
||||
...#...................................................................................................................#....................
|
||||
...............#.................#..........................................................................................................
|
||||
....................#.................#.......#..................#.........................#.............#.............................#....
|
||||
........................................................#...........................#.......................................................
|
||||
...........................#...............................................#................................................................
|
||||
.#.......#........................................................................................#........................................#
|
||||
................................#................................................................................#...............#..........
|
||||
....................................................#.......................................................................................
|
||||
...................................................................#.....................................#...............#............#.....
|
||||
....................................#......................#.............#..........#.....#.................................................
|
||||
...........#................................................................................................................................
|
||||
.......................#.....................#.................................................................#............................
|
||||
.............................#..............................................#........................#......................................
|
||||
..................#................................................................................................#................#.......
|
||||
..................................................#.........#..........#..................................................#.................
|
||||
.................................#.......................................................#.................................................#
|
||||
....#.......................................#.........#.......................................................................#.............
|
||||
............................................................................................................................................
|
||||
............................................................................................................................................
|
||||
........................................................................#...................................................................
|
||||
..#.............................................#................#....................................................#.....................
|
||||
..............#...............#.............................................................................................................
|
||||
........................#............................#..........................#........#..................................................
|
||||
...................................................................................................#...........#........................#...
|
||||
....#.............#..............#............................................................................................#.............
|
||||
............................................................................................................................................
|
||||
......................................................................................................#.....................................
|
||||
.................................................................#......................#...................................................
|
||||
.....................#....................#...........#.................#...................................................................
|
||||
................................................................................#......................................#..........#........#
|
||||
........#........................................................................................#..........................................
|
||||
..................................#.........................................................#....................#..........#...............
|
||||
#...........................#...........................................................................#...................................
|
||||
............#................................................#.........#...............#....................................................
|
||||
....#.......................................................................................................................................
|
||||
..........................................#.....................................................#..............#..............#.............
|
||||
............................................................................#.........................#.............#.......................
|
||||
................................#.....#.....................................................................................................
|
||||
...................#......#.................................#.......................#.......................#...............................
|
||||
...........................................................................................#......#...............................#.........
|
||||
#.............#.......................................#.....................................................................................
|
||||
.............................#..............#.............................................................................................#.
|
||||
......................#..................................................#............................#..............#......................
|
||||
........#........#.....................#...................#......#.............#............................#............#.................
|
||||
.........................................................................................#......................................#...........
|
||||
..................................#..................#............................................#...............#..................#......
|
||||
..........................#....................#............................................................................................
|
||||
..........................................#.................................................................................................
|
||||
.#...................................................................#.......................#.............#...............................#
|
||||
......#.......................#................................#.....................................................#......................
|
||||
............#.....#...................#............#.....#.......................#.................#........................................
|
||||
..........................................................................................................................#.....#......#....
|
||||
..........................................................................................#.............#...................................
|
||||
...........................................#........................................#.......................................................
|
||||
..#...................................................................#.....................................................................
|
||||
.........#...........................................#......................................................................................
|
||||
....................................#............................................................#.................................#.......#
|
||||
...........................#......................................................................................#.........................
|
||||
..........................................................#............................................................#....................
|
||||
...#..........#........#....................................................................................................................
|
||||
....................................................................................#......#.................#..................#...........
|
||||
..............................................................................#.............................................................
|
||||
.............................#.......#.....#...................#........#......................#.....................................#......
|
||||
............................................................................................................................................
|
||||
..........#.....#...................................................#.............#.....................#....................#..............
|
||||
........................#.................................#.............................#...........................#.......................
|
||||
........................................#...........#........................................#...........................................#..
|
||||
.....#.........................................#.................#.....#............................#.......................................
|
||||
...................................#........................................#........#......................................................
|
||||
...........................................................................................................................#................
|
||||
.#............................#..........................#...................................................#.........................#....
|
||||
.........#...................................#..........................................#.........................#.........................
|
||||
73
advent_of_code_2023/day11/main1.rs
Normal file
73
advent_of_code_2023/day11/main1.rs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
use std::fs::read_to_string;
|
||||
|
||||
fn difference(lhs: usize, rhs: usize) -> usize {
|
||||
if lhs > rhs {
|
||||
return lhs - rhs;
|
||||
}
|
||||
rhs - lhs
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let input = read_to_string("input.txt").unwrap();
|
||||
let mut starmap = input.lines().map(|line| {
|
||||
let mut vec: Vec<u8> = Vec::new();
|
||||
vec.extend_from_slice(line.as_bytes());
|
||||
vec
|
||||
}).collect::<Vec<_>>();
|
||||
|
||||
let mut index = 0;
|
||||
loop {
|
||||
if index == starmap.len() {
|
||||
break;
|
||||
}
|
||||
|
||||
if starmap[index].iter().filter(|ch| { **ch == b'#' }).count() == 0 {
|
||||
starmap.insert(index, starmap[index].clone());
|
||||
index += 1;
|
||||
}
|
||||
|
||||
index += 1;
|
||||
}
|
||||
|
||||
index = 0;
|
||||
loop {
|
||||
if index >= starmap[0].len() {
|
||||
break;
|
||||
}
|
||||
|
||||
let mut sum = 0;
|
||||
for line in &starmap {
|
||||
if line[index] == b'#' {
|
||||
sum += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if sum == 0 {
|
||||
for line in &mut starmap {
|
||||
line.insert(index, b'.');
|
||||
}
|
||||
index += 1;
|
||||
}
|
||||
|
||||
index += 1;
|
||||
}
|
||||
|
||||
let mut stars: Vec<(usize, usize)> = Vec::new();
|
||||
for row in 0..starmap.len() {
|
||||
for col in 0..starmap[row].len() {
|
||||
if starmap[row][col] == b'#' {
|
||||
stars.push((row, col));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut sum_difference = 0;
|
||||
for start_idx in 0..stars.len() {
|
||||
for inner_idx in start_idx..stars.len() {
|
||||
sum_difference += difference(stars[start_idx].0, stars[inner_idx].0);
|
||||
sum_difference += difference(stars[start_idx].1, stars[inner_idx].1);
|
||||
}
|
||||
}
|
||||
|
||||
println!("Sum of ranges: {}", sum_difference);
|
||||
}
|
||||
88
advent_of_code_2023/day11/main2.rs
Normal file
88
advent_of_code_2023/day11/main2.rs
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
use std::fs::read_to_string;
|
||||
|
||||
fn walk_row(distance_map: &Vec<(usize, usize)>, start: usize, end: usize) -> usize {
|
||||
let mut distance: usize = 0;
|
||||
let start_index = if start < end { start } else { end };
|
||||
let end_index = if start > end { start } else { end };
|
||||
|
||||
for index in start_index..end_index {
|
||||
distance += distance_map[index].0;
|
||||
}
|
||||
|
||||
distance
|
||||
}
|
||||
|
||||
fn walk_col(distance_map: &Vec<Vec<(usize, usize)>>, col: usize, start: usize, end: usize) -> usize {
|
||||
let mut distance = 0;
|
||||
let start_index = if start < end { start } else { end };
|
||||
let end_index = if start > end { start } else { end };
|
||||
|
||||
for index in start_index..end_index {
|
||||
distance += distance_map[index][col].1;
|
||||
}
|
||||
|
||||
distance
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let expansion: usize = 1_000_000;
|
||||
let input = read_to_string("input.txt").unwrap();
|
||||
let starmap = input.lines().map(|line| {
|
||||
let mut vec: Vec<u8> = Vec::new();
|
||||
vec.extend_from_slice(line.as_bytes());
|
||||
vec
|
||||
}).collect::<Vec<_>>();
|
||||
|
||||
let mut distance_map = starmap.iter().map(|line| {
|
||||
vec![(1 as usize, 1 as usize); line.len()]
|
||||
}).collect::<Vec<_>>();
|
||||
|
||||
for index in 0..starmap.len() {
|
||||
if starmap[index].iter().filter(|ch| { **ch == b'#' }).count() == 0 {
|
||||
for distance in distance_map[index].iter_mut() {
|
||||
distance.1 *= expansion;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut index = 0;
|
||||
loop {
|
||||
if index >= starmap[0].len() {
|
||||
break;
|
||||
}
|
||||
|
||||
let mut sum = 0;
|
||||
for line in &starmap {
|
||||
if line[index] == b'#' {
|
||||
sum += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if sum == 0 {
|
||||
for idx in 0..distance_map.len() {
|
||||
distance_map[idx][index].0 *= expansion;
|
||||
}
|
||||
}
|
||||
|
||||
index += 1;
|
||||
}
|
||||
|
||||
let mut stars: Vec<(usize, usize)> = Vec::new();
|
||||
for row in 0..starmap.len() {
|
||||
for col in 0..starmap[row].len() {
|
||||
if starmap[row][col] == b'#' {
|
||||
stars.push((row, col));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut sum_difference = 0;
|
||||
for start_idx in 0..stars.len() {
|
||||
for inner_idx in start_idx..stars.len() {
|
||||
sum_difference += walk_col(&distance_map, stars[start_idx].1, stars[start_idx].0, stars[inner_idx].0);
|
||||
sum_difference += walk_row(&distance_map[stars[start_idx].0], stars[start_idx].1, stars[inner_idx].1);
|
||||
}
|
||||
}
|
||||
|
||||
println!("Sum of ranges: {}", sum_difference);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue