Day 11
This commit is contained in:
parent
01ba0f6662
commit
65896a8f76
16
day11/Cargo.lock
generated
Normal file
16
day11/Cargo.lock
generated
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "anyhow"
|
||||||
|
version = "1.0.77"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c9d19de80eff169429ac1e9f48fffb163916b448a44e8e046186232046d9e1f9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day11"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
]
|
9
day11/Cargo.toml
Normal file
9
day11/Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "day11"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow = "1.0.77"
|
140
day11/input
Normal file
140
day11/input
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
.............................................................................................#..............................................
|
||||||
|
...#....................#............................#......................#........................#...........#................#.........
|
||||||
|
................#.....................................................#..............#.....................#................................
|
||||||
|
................................................................#.......................................................#...................
|
||||||
|
.......#........................#.........................#..............................#.....#............................................
|
||||||
|
............#............................#..................................................................................................
|
||||||
|
......................#........................#......................................................#.....................................
|
||||||
|
....................................#.....................................#.................#..........................................#....
|
||||||
|
................................................................................................................#..............#............
|
||||||
|
...................#.................................................#............................#.........................................
|
||||||
|
............................................#.........#...............................#.................#...................................
|
||||||
|
.....#.....................#..................................................#.............................................................
|
||||||
|
........................................................................#.................#.................................................
|
||||||
|
...............................................................#.....................................................#............#.........
|
||||||
|
..............#.......................#...........................................#.........................................................
|
||||||
|
.......................#.......................#...........................................................#................................
|
||||||
|
.........#........................................................#.........................................................................
|
||||||
|
.........................................................................#................................................................#.
|
||||||
|
............................#..........................#........................#.....#...............................#.....................
|
||||||
|
.....................................#..................................................................#....................#..............
|
||||||
|
#...........................................................................................................................................
|
||||||
|
..........#......................#...........#............#............#....................................................................
|
||||||
|
....................#.........................................................#.................................#...........................
|
||||||
|
.................................................#.............#.....................#..........#......................#..........#.........
|
||||||
|
....................................#.......................................................................................................
|
||||||
|
..........................................#..............................................................................................#..
|
||||||
|
......................#.....................................................................................#.....#.........#...............
|
||||||
|
...........#................#.............................#.............#.....................#.............................................
|
||||||
|
#.................#...............................................#...........#.............................................................
|
||||||
|
.......................................#.................................................#..................................................
|
||||||
|
.....#.......................................#.......................................................#..............................#......#
|
||||||
|
..............#.................#.................#..................#..............#..............................#........................
|
||||||
|
...........................................................................#................................................................
|
||||||
|
.........................#............................#....................................................#................#...............
|
||||||
|
.#..............................................................................#...........................................................
|
||||||
|
.......................................#................................#......................#............................................
|
||||||
|
................#...........#...................#.......................................................................................#...
|
||||||
|
..............................................................#..........................................................#..................
|
||||||
|
.......#......................................................................#.........#.............#.....................................
|
||||||
|
.......................................................#....................................................................................
|
||||||
|
......................#................................................#....................................#.............................#.
|
||||||
|
#.........................................#......................................................................#..........................
|
||||||
|
..................................#................#............................................#.......#...................................
|
||||||
|
.....#.....................#.............................#.............................#....................................................
|
||||||
|
................#...............................................#...........................................................................
|
||||||
|
...............................#................................................#....................#..........................#...........
|
||||||
|
......................................................#....................#................#................#..............................
|
||||||
|
..#..........................................#......................................................................#.......................
|
||||||
|
.............#..............................................................................................................................
|
||||||
|
.......................................................................................................................................#....
|
||||||
|
.......................#..............#...........................#............................#...............#............................
|
||||||
|
.........#..................#...............................................#...........#...................................................
|
||||||
|
......................................................................#........................................................#............
|
||||||
|
..............................................................#....................#...............#......#........#........................
|
||||||
|
..............#...................#.............#.....................................................................................#.....
|
||||||
|
............................................................................................................................................
|
||||||
|
.....................#.....#............#...........#......................................#................................................
|
||||||
|
..........#...................................................................................................................#...........#.
|
||||||
|
...#......................................................................#.....................#................#..........................
|
||||||
|
.............................................#...........................................................................#..................
|
||||||
|
......................................................#...........#................#................#.................................#.....
|
||||||
|
.................................#.....................................#..................#...............#......................#..........
|
||||||
|
............................................................................................................................................
|
||||||
|
.......#..............................................................................................................#.....................
|
||||||
|
.....................#..............#......#.................................................#..............................................
|
||||||
|
..............................#..................................#..............#............................#..............................
|
||||||
|
..........#...............................................#............................#..........................................#.........
|
||||||
|
#.................................................#...................#...........................#.........................................
|
||||||
|
.......................................#....................................................................................................
|
||||||
|
.......#...........................................................................#........................................................
|
||||||
|
................#............................................#............................................#.........#....................#..
|
||||||
|
.......................#........#.........#...............................................................................#.................
|
||||||
|
............................................................................................................................................
|
||||||
|
..#................#........................................................................................................................
|
||||||
|
..........#...........................................#......................................#..............................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.....#.....................................#...................#....................................................................#.......
|
||||||
|
.........................#...........#............#.................................................................#....................#..
|
||||||
|
........................................................#...............#...................................................................
|
||||||
|
............#.................#.................................................#......#..............#.....................................
|
||||||
|
.............................................................................................#................#................#............
|
||||||
|
........................................#.......................#..........................................................................#
|
||||||
|
..#.................#..........................#......................#.............#..............#...................#.............#......
|
||||||
|
............................#............................#................................#......................#..........................
|
||||||
|
.............#.................................................................................#............................................
|
||||||
|
.................................#.........................................#................................................................
|
||||||
|
.........................#.........................#.................................................#........................#.............
|
||||||
|
.......#......................................................#.............................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.......................#.........................................................................................#..........................
|
||||||
|
...#...........................#..................................................................#......#................#.................
|
||||||
|
...............................................#................#...........................................................................
|
||||||
|
....................#.................................#.................#.......#..........#........................................#.......
|
||||||
|
...........#.................................................................................................#.............................#
|
||||||
|
.#..................................................................................................#.......................................
|
||||||
|
.....................................#.................................................................................#....................
|
||||||
|
...............#.........#...........................................................#......................................................
|
||||||
|
................................#........................#........#.........................................................................
|
||||||
|
......#..........................................#.............................................................................#............
|
||||||
|
...............................................................................................#.......#....................................
|
||||||
|
...............................................................................................................#............................
|
||||||
|
..............................#...........#............................#.................................................#............#.....
|
||||||
|
...................#...........................#............................................................................................
|
||||||
|
...............................................................#.....................#.....#................................................
|
||||||
|
........#.................#.......................................................................................#...........#.............
|
||||||
|
...............#............................#.........#.......................#...........................#.................................
|
||||||
|
.#...................................#...................................#................................................................#.
|
||||||
|
.........................................................................................#...........................................#......
|
||||||
|
........................#...................................................................................................................
|
||||||
|
....................................................................................................................#.......................
|
||||||
|
........................................#.....#.........#.........#.........................................................................
|
||||||
|
.......................................................................................#............#.......................................
|
||||||
|
.#..............................#.............................................................#........................#.....#.....#........
|
||||||
|
............#...............................................................#.................................#.........................#...
|
||||||
|
..............................................................#.........................................#...................................
|
||||||
|
........................#..............................#...............#........#.........#.................................................
|
||||||
|
...................#........................#.......................................................................#.......................
|
||||||
|
.......................................#...................................................................#................................
|
||||||
|
..............#..................#..............#...................................................................................#.......
|
||||||
|
........#......................................................#..............#.................#.........................................#.
|
||||||
|
....................................................................#.......................................................#...............
|
||||||
|
.............................#..........................................................................#...................................
|
||||||
|
.................#..................................................................#.......................................................
|
||||||
|
............................................#..........................#............................................#..............#........
|
||||||
|
......#..............#..........................................#...........#..............................#................................
|
||||||
|
............#.....................#.................................................................#.......................................
|
||||||
|
...........................#.............#...............#..................................................................#...............
|
||||||
|
#....................................................................................................................................#......
|
||||||
|
.............................................................#.....................#........................................................
|
||||||
|
.......#..........................................#.................#....................................#........#.......................#.
|
||||||
|
..........................................................................................#.................................................
|
||||||
|
..........................#..............................................#......................#...........................................
|
||||||
|
...............................#.....................#..........................#.............................#.............................
|
||||||
|
....#......#................................................#..........................#.......................................#............
|
||||||
|
..................#.............................#...........................................................................................
|
||||||
|
...........................................#..................................................#.............................................
|
||||||
|
.......................#...........................................#...................................................#...................#
|
||||||
|
.......#......#.............#.........................#..................#..............................#...........................#.......
|
||||||
|
..#..............................................................................................................#..........................
|
71
day11/src/main.rs
Normal file
71
day11/src/main.rs
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
use std::io::stdin;
|
||||||
|
|
||||||
|
use anyhow::Result;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Space {
|
||||||
|
galaxies: Vec<(usize, usize)>,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<()> {
|
||||||
|
let space = Space::load()?;
|
||||||
|
let total: usize = space.pairs()
|
||||||
|
.map(|(a,b)| manhattan_distance(a,b))
|
||||||
|
.sum();
|
||||||
|
println!("Part 1: total distance {total}");
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn manhattan_distance(a: (usize,usize), b: (usize,usize)) -> usize {
|
||||||
|
a.0.abs_diff(b.0) + a.1.abs_diff(b.1)
|
||||||
|
}
|
||||||
|
|
||||||
|
const EXPANSION_FACTOR: usize = 1_000_000 - 1;
|
||||||
|
|
||||||
|
impl Space {
|
||||||
|
|
||||||
|
fn load() -> Result<Space> {
|
||||||
|
let mut galaxies = vec![];
|
||||||
|
|
||||||
|
let mut empty_lines = vec![];
|
||||||
|
let mut non_empty_columns = vec![];
|
||||||
|
|
||||||
|
for (x, l) in
|
||||||
|
stdin().lines().enumerate()
|
||||||
|
{
|
||||||
|
let mut empty = true;
|
||||||
|
for (y,c) in l?.chars().enumerate() {
|
||||||
|
if c == '#' {
|
||||||
|
empty = false;
|
||||||
|
galaxies.push((x,y));
|
||||||
|
if non_empty_columns.len() <= y {
|
||||||
|
non_empty_columns.resize(y+1, false);
|
||||||
|
}
|
||||||
|
non_empty_columns[y] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if empty { empty_lines.push(x) };
|
||||||
|
}
|
||||||
|
|
||||||
|
let empty_columns: Vec<_> = non_empty_columns.iter()
|
||||||
|
.enumerate()
|
||||||
|
.filter_map(|(y, full)| Some(y).filter(|_| !full))
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
for (x,y) in &mut galaxies {
|
||||||
|
*x += EXPANSION_FACTOR * empty_lines.iter().filter(|&&l| l < *x).count();
|
||||||
|
*y += EXPANSION_FACTOR * empty_columns.iter().filter(|&&c| c < *y).count();
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(Space { galaxies })
|
||||||
|
}
|
||||||
|
|
||||||
|
fn pairs(&self) -> impl Iterator<Item=((usize,usize),(usize,usize))> + '_ {
|
||||||
|
self.galaxies.iter()
|
||||||
|
.enumerate()
|
||||||
|
.flat_map(|(i, &a)| {
|
||||||
|
self.galaxies.iter().skip(i+1).map(move |&b| { (a,b)})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
10
day11/test
Normal file
10
day11/test
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#.....
|
Loading…
Reference in New Issue
Block a user