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