This commit is contained in:
Maxime Augier 2023-12-30 19:52:21 +01:00
parent 01ba0f6662
commit 65896a8f76
5 changed files with 246 additions and 0 deletions

16
day11/Cargo.lock generated Normal file
View 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
View 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
View File

@ -0,0 +1,140 @@
.............................................................................................#..............................................
...#....................#............................#......................#........................#...........#................#.........
................#.....................................................#..............#.....................#................................
................................................................#.......................................................#...................
.......#........................#.........................#..............................#.....#............................................
............#............................#..................................................................................................
......................#........................#......................................................#.....................................
....................................#.....................................#.................#..........................................#....
................................................................................................................#..............#............
...................#.................................................#............................#.........................................
............................................#.........#...............................#.................#...................................
.....#.....................#..................................................#.............................................................
........................................................................#.................#.................................................
...............................................................#.....................................................#............#.........
..............#.......................#...........................................#.........................................................
.......................#.......................#...........................................................#................................
.........#........................................................#.........................................................................
.........................................................................#................................................................#.
............................#..........................#........................#.....#...............................#.....................
.....................................#..................................................................#....................#..............
#...........................................................................................................................................
..........#......................#...........#............#............#....................................................................
....................#.........................................................#.................................#...........................
.................................................#.............#.....................#..........#......................#..........#.........
....................................#.......................................................................................................
..........................................#..............................................................................................#..
......................#.....................................................................................#.....#.........#...............
...........#................#.............................#.............#.....................#.............................................
#.................#...............................................#...........#.............................................................
.......................................#.................................................#..................................................
.....#.......................................#.......................................................#..............................#......#
..............#.................#.................#..................#..............#..............................#........................
...........................................................................#................................................................
.........................#............................#....................................................#................#...............
.#..............................................................................#...........................................................
.......................................#................................#......................#............................................
................#...........#...................#.......................................................................................#...
..............................................................#..........................................................#..................
.......#......................................................................#.........#.............#.....................................
.......................................................#....................................................................................
......................#................................................#....................................#.............................#.
#.........................................#......................................................................#..........................
..................................#................#............................................#.......#...................................
.....#.....................#.............................#.............................#....................................................
................#...............................................#...........................................................................
...............................#................................................#....................#..........................#...........
......................................................#....................#................#................#..............................
..#..........................................#......................................................................#.......................
.............#..............................................................................................................................
.......................................................................................................................................#....
.......................#..............#...........................#............................#...............#............................
.........#..................#...............................................#...........#...................................................
......................................................................#........................................................#............
..............................................................#....................#...............#......#........#........................
..............#...................#.............#.....................................................................................#.....
............................................................................................................................................
.....................#.....#............#...........#......................................#................................................
..........#...................................................................................................................#...........#.
...#......................................................................#.....................#................#..........................
.............................................#...........................................................................#..................
......................................................#...........#................#................#.................................#.....
.................................#.....................................#..................#...............#......................#..........
............................................................................................................................................
.......#..............................................................................................................#.....................
.....................#..............#......#.................................................#..............................................
..............................#..................................#..............#............................#..............................
..........#...............................................#............................#..........................................#.........
#.................................................#...................#...........................#.........................................
.......................................#....................................................................................................
.......#...........................................................................#........................................................
................#............................................#............................................#.........#....................#..
.......................#........#.........#...............................................................................#.................
............................................................................................................................................
..#................#........................................................................................................................
..........#...........................................#......................................#..............................................
............................................................................................................................................
.....#.....................................#...................#....................................................................#.......
.........................#...........#............#.................................................................#....................#..
........................................................#...............#...................................................................
............#.................#.................................................#......#..............#.....................................
.............................................................................................#................#................#............
........................................#.......................#..........................................................................#
..#.................#..........................#......................#.............#..............#...................#.............#......
............................#............................#................................#......................#..........................
.............#.................................................................................#............................................
.................................#.........................................#................................................................
.........................#.........................#.................................................#........................#.............
.......#......................................................#.............................................................................
............................................................................................................................................
............................................................................................................................................
.......................#.........................................................................................#..........................
...#...........................#..................................................................#......#................#.................
...............................................#................#...........................................................................
....................#.................................#.................#.......#..........#........................................#.......
...........#.................................................................................................#.............................#
.#..................................................................................................#.......................................
.....................................#.................................................................................#....................
...............#.........#...........................................................#......................................................
................................#........................#........#.........................................................................
......#..........................................#.............................................................................#............
...............................................................................................#.......#....................................
...............................................................................................................#............................
..............................#...........#............................#.................................................#............#.....
...................#...........................#............................................................................................
...............................................................#.....................#.....#................................................
........#.................#.......................................................................................#...........#.............
...............#............................#.........#.......................#...........................#.................................
.#...................................#...................................#................................................................#.
.........................................................................................#...........................................#......
........................#...................................................................................................................
....................................................................................................................#.......................
........................................#.....#.........#.........#.........................................................................
.......................................................................................#............#.......................................
.#..............................#.............................................................#........................#.....#.....#........
............#...............................................................#.................................#.........................#...
..............................................................#.........................................#...................................
........................#..............................#...............#........#.........#.................................................
...................#........................#.......................................................................#.......................
.......................................#...................................................................#................................
..............#..................#..............#...................................................................................#.......
........#......................................................#..............#.................#.........................................#.
....................................................................#.......................................................#...............
.............................#..........................................................................#...................................
.................#..................................................................#.......................................................
............................................#..........................#............................................#..............#........
......#..............#..........................................#...........#..............................#................................
............#.....................#.................................................................#.......................................
...........................#.............#...............#..................................................................#...............
#....................................................................................................................................#......
.............................................................#.....................#........................................................
.......#..........................................#.................#....................................#........#.......................#.
..........................................................................................#.................................................
..........................#..............................................#......................#...........................................
...............................#.....................#..........................#.............................#.............................
....#......#................................................#..........................#.......................................#............
..................#.............................#...........................................................................................
...........................................#..................................................#.............................................
.......................#...........................................#...................................................#...................#
.......#......#.............#.........................#..................#..............................#...........................#.......
..#..............................................................................................................#..........................

71
day11/src/main.rs Normal file
View 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
View File

@ -0,0 +1,10 @@
...#......
.......#..
#.........
..........
......#...
.#........
.........#
..........
.......#..
#...#.....