Part 11
This commit is contained in:
124
src/bin/part11.rs
Normal file
124
src/bin/part11.rs
Normal file
@@ -0,0 +1,124 @@
|
||||
use std::time;
|
||||
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
#[allow(dead_code)]
|
||||
struct Galaxy {
|
||||
id: u16,
|
||||
x: i16,
|
||||
y: i16,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let t1 = time::Instant::now();
|
||||
let mut galaxy_map = load_input();
|
||||
let d1 = t1.elapsed();
|
||||
println!("Loading: {:?}", d1);
|
||||
|
||||
let t2 = time::Instant::now();
|
||||
expand_map(&mut galaxy_map);
|
||||
//print_map(&galaxy_map);
|
||||
let d2 = t2.elapsed();
|
||||
println!("Expanding: {:?}", d2);
|
||||
|
||||
let t3 = time::Instant::now();
|
||||
let parsed_map = parse_map(&galaxy_map);
|
||||
//println!("{:?}", parsed_map);
|
||||
let d3 = t3.elapsed();
|
||||
println!("Parsing: {:?}", d3);
|
||||
|
||||
let t4 = time::Instant::now();
|
||||
let distances = calc_distances(&parsed_map);
|
||||
let d4 = t4.elapsed();
|
||||
println!("Calculating: {:?}", d4);
|
||||
|
||||
let d5 = t1.elapsed();
|
||||
let sum_distances = distances.iter().sum::<u32>();
|
||||
println!("Summing: {:?}", d5);
|
||||
println!("Total: {:?}", d1 + d2 + d3 + d4 + d5);
|
||||
println!("Sum of distances: {}", sum_distances);
|
||||
}
|
||||
|
||||
fn calc_distances(galaxies: &Vec<Galaxy>) -> Vec<u32> {
|
||||
let mut distances = Vec::new();
|
||||
|
||||
for (i, g1) in galaxies.iter().enumerate() {
|
||||
for g2 in &galaxies[i + 1..] {
|
||||
let distance = ((g2.x - g1.x).abs() + (g2.y - g1.y).abs()) as u32;
|
||||
distances.push(distance);
|
||||
}
|
||||
}
|
||||
|
||||
distances
|
||||
}
|
||||
|
||||
fn parse_map(galaxy_map: &Vec<Vec<bool>>) -> Vec<Galaxy> {
|
||||
let mut galaxies = Vec::new();
|
||||
|
||||
for (y, row) in galaxy_map.iter().enumerate() {
|
||||
for (x, c) in row.iter().enumerate() {
|
||||
if *c {
|
||||
galaxies.push(Galaxy {
|
||||
id: galaxies.len() as u16 + 1,
|
||||
x: x as i16,
|
||||
y: y as i16,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
galaxies
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn print_map(galaxy_map: &Vec<Vec<bool>>) {
|
||||
for row in galaxy_map {
|
||||
for c in row {
|
||||
print!("{}", if *c { '#' } else { '.' });
|
||||
}
|
||||
println!();
|
||||
}
|
||||
}
|
||||
|
||||
fn expand_map(galaxy_map: &mut Vec<Vec<bool>>) {
|
||||
let mut new_map = Vec::new();
|
||||
|
||||
for row in &mut *galaxy_map {
|
||||
new_map.push(row.clone());
|
||||
if row.iter().all(|c| !*c) {
|
||||
new_map.push(row.repeat(1_000_000));
|
||||
}
|
||||
}
|
||||
|
||||
let mut shift_offset = 0;
|
||||
for (i, _) in galaxy_map[0].iter().enumerate() {
|
||||
if galaxy_map.iter().all(|row| !row[i]) {
|
||||
for row in new_map.iter_mut() {
|
||||
row.insert(i + shift_offset, false);
|
||||
}
|
||||
shift_offset += 1;
|
||||
}
|
||||
}
|
||||
|
||||
*galaxy_map = new_map;
|
||||
}
|
||||
|
||||
fn load_input() -> Vec<Vec<bool>> {
|
||||
let data = std::fs::read_to_string("src/bin/sources/part11.txt")
|
||||
.expect("Could not read file")
|
||||
.lines()
|
||||
.map(|line| {
|
||||
line.chars()
|
||||
.map(|c| {
|
||||
match c {
|
||||
'#' => true,
|
||||
'.' => false,
|
||||
_ => panic!("Invalid input")
|
||||
}
|
||||
})
|
||||
.collect::<Vec<_>>()
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
data
|
||||
}
|
||||
10
src/bin/sources/part11.sample
Normal file
10
src/bin/sources/part11.sample
Normal file
@@ -0,0 +1,10 @@
|
||||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
||||
140
src/bin/sources/part11.txt
Normal file
140
src/bin/sources/part11.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
.......#.....#.....................#.............#.................#.........................#..............................................
|
||||
#.....................#.......#.................................................................................#.......#...................
|
||||
.......................................................................#.........................#..................................#.......
|
||||
................................................................#..............#..............................................#.............
|
||||
.........................................#............................................................#....................................#
|
||||
.................#..................................................#.......................................................................
|
||||
...........................#...............................................................................#................................
|
||||
....#.......#...........................................#..........................#.............................#..........................
|
||||
....................#.............#........#................................................................................................
|
||||
...................................................#...................................................#...................#................
|
||||
.........................#........................................#..................................................#......................
|
||||
......#..........#...........................................#...........#............#.....................................................
|
||||
......................................#..........................................#.........................#.....................#..........
|
||||
.#...................#..................................#.......................................#...........................................
|
||||
............#.................................#.....................#.......................................................................
|
||||
............................................................................................................................................
|
||||
..............................#.....................................................................................#..................#....
|
||||
....................................................................................#........#......#.......................................
|
||||
.........................#.........................#............#...........................................#...............................
|
||||
.#......#.....#.......................#.................#........................................................#.....#....................
|
||||
...........................................................................#.................................................#..............
|
||||
...............................................#.......................................#...............#..........................#.........
|
||||
......................#..................#..................................................................................................
|
||||
..........................................................................................................................#.................
|
||||
......#...........................#.........................................................#........................#......................
|
||||
..............................................................................................................................#.............
|
||||
..#.......................#.................#............................................................................................#..
|
||||
..................#....................................................#................#...................................................
|
||||
....................................................#.....#....................#............................................................
|
||||
...............................#............................................................................................................
|
||||
..............................................#...............#..........................................................#...........#......
|
||||
.#.........#........................#..................................................................#....................................
|
||||
..........................................................................#.......................#........................................#
|
||||
...................#......................................................................#.................................................
|
||||
.............................................................................................................................#..............
|
||||
.....#......................................................................................................................................
|
||||
........................................................#........................#..........................................................
|
||||
.............................#...............#.....................#.....#............#..................#..............................#...
|
||||
............................................................................................#......#...........#............................
|
||||
.........................#........#...................................................................................#.....................
|
||||
...........................................................................................................................................#
|
||||
.....................................................#.....#.................................................................#..............
|
||||
#.........................................................................................................#.......................#.........
|
||||
................#...........................................................#.....................#.........................................
|
||||
..............................#..............#...................................#.......#...........................#......................
|
||||
........#................#.........#............................#............................................#.............#.........#......
|
||||
............................................................................................................................................
|
||||
.......................................................#...............#.............................#...........................#..........
|
||||
.............#.................................#............................................................................................
|
||||
............................................................................................................................................
|
||||
..#.............................................................................#...........................................#...........#...
|
||||
............................................................................................................................................
|
||||
......................................#..........................................................#................#.........................
|
||||
............................#................#......#......................#...........#....................................................
|
||||
............................................................................................................................................
|
||||
....................................................................................................#................#..........#...........
|
||||
.#............#...................#...............................#........................................#.............................#..
|
||||
.........#...............................................................#..................................................................
|
||||
.......................#....................#........#...........................................#..........................................
|
||||
............................................................#.....................................................#.........................
|
||||
..............................#.......................................................................#...................#.......#.........
|
||||
............#.......................#...................#............................#......................................................
|
||||
...................................................#......................................#..............................................#..
|
||||
.#................#...................................................#........................#............................................
|
||||
......#....................................................................#................................#...............................
|
||||
...............................#....................................................................................#.......................
|
||||
.........................#.....................#......#.............................................#.................................#.....
|
||||
............................................................................................................................................
|
||||
...............#.....................#....................................................#.................................................
|
||||
..................................................................................................................#.........................
|
||||
....#......#.....................................#..............................#............................#............#.....#...........
|
||||
....................#.............................................#....................#.........#.......................................#..
|
||||
.........................................................#..............#.............................#.....................................
|
||||
............................#...........#...........................................................................#.......................
|
||||
............................................................................................................................................
|
||||
#..................................#...............................................................#..........#.............................
|
||||
.......#......................................................................................#.................................#.......#...
|
||||
.....................#....................#...............................#.....#......................................#....................
|
||||
................................#..........................#......#....................#..........................#.........................
|
||||
..............#...................................#........................................................................#...............#
|
||||
....#....................................................................................................#..................................
|
||||
.......................#....................................................................................................................
|
||||
......................................#................................#..................#.................................................
|
||||
.....................................................#............................................#...............................#.........
|
||||
............................................................................................................................................
|
||||
............................................................................................................................................
|
||||
....#.................#..................................#.........................#..........................#.............................
|
||||
.............#........................................................................................#..................#..................
|
||||
......................................#............................................................................#........................
|
||||
.........#....................................................#.........#............................................................#......
|
||||
.............................................................................................#..............................................
|
||||
.............................#...........#............................................................................#.....................
|
||||
#..................#................................................#....................#.......................................#.........#
|
||||
...................................................................................................#......#.................................
|
||||
...........#.............................................#...........................#......................................................
|
||||
....................................#.......................................................................................................
|
||||
..................................................#..........#.........#......................#.....................#.......................
|
||||
.#......#....................................#..............................................................#...............................
|
||||
.............................#.............................................#................................................................
|
||||
.......................#...............................................................................#....................#...............
|
||||
....................................................#.....................................#...........................................#.....
|
||||
................#.....................#..................#.................................................................................#
|
||||
...#.....#..........................................................#................#......................................................
|
||||
.............................................#...............#................................#......#......................................
|
||||
...............................#...............................................#............................................................
|
||||
.............................................................................................................................#.........#....
|
||||
.....................#................................................#.................................................#...................
|
||||
...............#.........................#.......................#..................#.......................................................
|
||||
.....#......................................................................................................#.......................#.......
|
||||
....................................#.................#.........................#..................#........................................
|
||||
........................................................................................................................................#...
|
||||
.........#..............#.....................................#........................................#.....................#..............
|
||||
...............................................#...................#........................................................................
|
||||
......................................#.............#..................................#.....#.......................#......................
|
||||
............#.....#...............................................................................#.........................................
|
||||
...#...................................................................................................................................#....
|
||||
.......................#.........................#..........................................................................................
|
||||
.........................................................#...........#.........................#........#..........#.............#..........
|
||||
............................#..............#....................#........................................................#..................
|
||||
.......#.................................................................#................#.................................................
|
||||
.................#..................................................................................#........................#...........#..
|
||||
...................................................#.......#................................................................................
|
||||
.........................................#......................................#......................................#....................
|
||||
....................................#...........................................................................#...........................
|
||||
..............................#.............................................................#...........#.......................#......#....
|
||||
.........#...............................................#..............#...................................................................
|
||||
........................#....................#.....................................#........................................................
|
||||
#...........................................................................................................................................
|
||||
............................#......................................................................#.......#................................
|
||||
......................................#.....................................................................................................
|
||||
.....#............#.........................................#..........................#..........................................#.........
|
||||
...........................................#......................#..............................................#..........................
|
||||
..............#..............................................................................#............................#.............#...
|
||||
..#......#...........................................#..............................#..................#.....#..............................
|
||||
....................#..........#.....#...............................#......................................................................
|
||||
............................................................................................................................................
|
||||
.................................................#..........................................................................................
|
||||
.............#..........#...............................#...............#.............#..........#.........#........#.......................
|
||||
............................................#................#.................#............................................................
|
||||
....................................#....................................................................................#.............#....
|
||||
Reference in New Issue
Block a user