day 11 part 1
This commit is contained in:
parent
998dfd5c61
commit
c6fc7ded50
2 changed files with 223 additions and 0 deletions
140
inputs/day11.txt
Normal file
140
inputs/day11.txt
Normal file
|
@ -0,0 +1,140 @@
|
|||
..............................#.........................#.......................#..............................#.........................#..
|
||||
....#.....#...................................#.............................................................................................
|
||||
.....................................#..................................#...................................................................
|
||||
...................................................#....................................................................#...................
|
||||
...............................................................#..................#...............................#.........................
|
||||
...............#.......................................#...................................#.....#.......#.........................#........
|
||||
............................................................................................................................................
|
||||
............................................................................#...............................................................
|
||||
.......#.......................#....................#.......................................................................................
|
||||
........................#..................#....................................................................#...........................
|
||||
..#.......................................................#.........#....................#....................................#.............
|
||||
..............#...........................................................#..........................................................#......
|
||||
......................................#...........................................#..........................#..............................
|
||||
.....................................................#.........#..........................................................................#.
|
||||
#.......#....................................#.................................................#............................................
|
||||
..............................#.......................................#..............#....................#..........#......................
|
||||
....#...................................#...................................................................................................
|
||||
....................................................................................................#.......................................
|
||||
.....................#...........#...............................................#..................................................#.......
|
||||
...............................................#.........#..................................................#..................#............
|
||||
..........................................................................#...............#........................#........................
|
||||
.................#.......................................................................................................#..................
|
||||
......................................................................................#..................#..............................#...
|
||||
.............#...................................................................................#..........................................
|
||||
#...........................#..........#....................................................................................................
|
||||
.........#........................................................................#...............................#.........................
|
||||
.....................#.........................#.....................................................#....................#......#..........
|
||||
.....................................................................#......................................................................
|
||||
................................#.....................................................................................................#.....
|
||||
...............#..........................................#.................#................#..............................................
|
||||
....................................#...........................#...........................................#...............................
|
||||
.......#...................#................#.......................................#..............................#......................#.
|
||||
......................#.................................................#................................................#..................
|
||||
....................................................#......................................#............#...................................
|
||||
.............#........................#..........................................................#.............#............................
|
||||
...................#..............................................................#.........................................................
|
||||
.........................................................#..................#..........#....................................................
|
||||
........................#.....................#..............................................#.........................................#....
|
||||
.................................................................#.........................................#...................#............
|
||||
...................................................#........#.....................................#......................#..................
|
||||
.........#....................#.......#................................................................#............#.......................
|
||||
#.............................................................................#.....................................................#.......
|
||||
..................#.......#.................................................................................................................
|
||||
.............#........................................................#........................#................#..........#..............#.
|
||||
.....................................................#......................................................................................
|
||||
.......#...............#.................#......................#................#..........................................................
|
||||
...................................#.....................................................#............................#.....................
|
||||
............................................................................................................................................
|
||||
...............................#........................................#.........................#.........................................
|
||||
.....#.........#...............................#...................#.....................................................................#..
|
||||
............................................................................................................................................
|
||||
..........#......................................................................#..........................................................
|
||||
.........................................#.............................................#......#...................#...................#.....
|
||||
........................#.....#........................................................................#....................................
|
||||
...................................................#.....#...................#..............................................................
|
||||
....................................................................#...............#....................................#........#.........
|
||||
...........................#..............................................................#.................................................
|
||||
...#........................................#.........#.......................................................#..............#..............
|
||||
..........#....................................................#................#...........................................................
|
||||
..................................#..................................................................................#...............#......
|
||||
.................#..........................................................................................................................
|
||||
............................................................................................................................................
|
||||
............................#.............#................................#.........................#.....................#................
|
||||
.........#.........................................#............#.........................#............................................#....
|
||||
....#................................................................#.........................#..............#.............................
|
||||
...................#......................................#.................................................................................
|
||||
..............................#......#..............................................#..............#................#.......................
|
||||
.............................................................................#..............................................................
|
||||
.......#.........................................................................................................................#..........
|
||||
..............#............#....................#...................#............#.......#.................................#................
|
||||
................................#......................#................................................#.................................#.
|
||||
............................................................................................................................................
|
||||
.#......................#......................................#...............................................#............................
|
||||
........................................................................#............................#......................................
|
||||
..................................................#..........................#..........................................#.......#...........
|
||||
.........................................#..........................................#....................#..............................#...
|
||||
......#...............#.................................#...................................................................................
|
||||
....................................#.......................................................................................................
|
||||
...............................................................#................#........#.........................#..........#.............
|
||||
..#........#.....#..........#...................#...................................................#.......................................
|
||||
.......................................#...........................#...........................................#............................
|
||||
.............................................................................#..............................................................
|
||||
.......................#..................................#............#...............#.......#.....................................#......
|
||||
............................................................................................................................................
|
||||
............#.....#................................#...........#...................................................#............#...........
|
||||
...........................................#..............................................#.................................................
|
||||
..................................#..............................................#.....................#....................................
|
||||
..................................................................#.........................................................................
|
||||
...#..........................#............................................#................................................................
|
||||
.......................................................#..........................................#........#........#.......................
|
||||
.......................................#.................................................................................#......#...........
|
||||
.................................................#..........#.........#.......................#.............................................
|
||||
............................................................................................................................................
|
||||
....#...........#........................................................................................#.......#...........#..............
|
||||
......................#...........#.......#....................#..............#.....#.......................................................
|
||||
.........#...............................................................................#..................................................
|
||||
..................................................#.........................................................................................
|
||||
...................#......................................#...........................................#...........................#......#..
|
||||
.............#..........#.....................#....................#........................................................................
|
||||
...............................................................................#.....#.....#.................#......#.......................
|
||||
...#.........................#...................................................................#........................#.................
|
||||
............................................................................................................................................
|
||||
.......#.........#..........................................#...............................................................................
|
||||
.................................#..............................................................................................#...........
|
||||
........................................................................#..............#.......#..................#........................#
|
||||
.#...................................#......#......#........................................................................................
|
||||
............................................................................................................................................
|
||||
.............#................#............................................................#..............#.................................
|
||||
......#.....................................................#.......................#................#...............................#......
|
||||
...................#..............................................#.......................................................#.................
|
||||
....................................#.....................................#.................................................................
|
||||
........................................................................................................#.......#...........................
|
||||
....#.....................................#...............#...................#...............#.........................................#...
|
||||
.....................................................................................#......................................................
|
||||
....................................................#...........#......................................................#............#.......
|
||||
........................#...................................................................................#...............................
|
||||
............................................................................#.....#.........#......................#........................
|
||||
...#.....#.....#.......................#....................................................................................................
|
||||
............................................................................................................................................
|
||||
......................................................................#.....................................................................
|
||||
......................................................................................#............#..........................#.............
|
||||
.....#.............#.........................................................#................#.............................................
|
||||
..............................#..........#............#.....#...........................................................#.............#.....
|
||||
........................................................................#................#..................................................
|
||||
..................................................................................#.........................................................
|
||||
......................#.............#....................#........................................................#.........................
|
||||
.................#................................#.............#.............#.............................................................
|
||||
............................................................................................................................................
|
||||
...#..........................#.............#....................................................#.......#...............#.........#........
|
||||
........#...........#.................#..................................................................................................#..
|
||||
..............#.................................#.....#..........................................................#..........................
|
||||
...........................................................#......#.........................................................................
|
||||
............................#..................................................#.....................................#......................
|
||||
...................................................#.......................................#................................................
|
||||
.#................#................#...............................................#...........................................#.....#......
|
||||
.............#....................................................................................................#.........................
|
||||
.........................#...........................................#.....#......................#..........#..............................
|
||||
........................................#...................#...........................................#...................................
|
||||
...#......#............................................................................#....................................................
|
||||
...............................................#.......................................................................#....................
|
83
src/bin/day11.rs
Normal file
83
src/bin/day11.rs
Normal file
|
@ -0,0 +1,83 @@
|
|||
#![forbid(elided_lifetimes_in_paths, unsafe_code)]
|
||||
|
||||
use aoc23::read;
|
||||
use chumsky::prelude::*;
|
||||
use std::collections::HashSet;
|
||||
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||
enum Cell {
|
||||
Void,
|
||||
Galaxy
|
||||
}
|
||||
|
||||
impl Cell {
|
||||
fn parser() -> impl Parser<char, Self, Error = Simple<char>> {
|
||||
choice((
|
||||
just('.').map(|_| Self::Void),
|
||||
just('#').map(|_| Self::Galaxy)
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
fn parser() -> impl Parser<char, Vec<Vec<Cell>>, Error = Simple<char>> {
|
||||
Cell::parser()
|
||||
.repeated()
|
||||
.then_ignore(just("\n"))
|
||||
.repeated()
|
||||
.then_ignore(end())
|
||||
}
|
||||
|
||||
fn main() -> anyhow::Result<()> {
|
||||
let universe = read("inputs/day11.txt", parser())?;
|
||||
|
||||
let empty_rows: HashSet<usize> = universe
|
||||
.iter()
|
||||
.enumerate()
|
||||
.filter(|(_, row)| row.iter().all(|cell| *cell == Cell::Void))
|
||||
.map(|(i, _)| i)
|
||||
.collect();
|
||||
let empty_cols: HashSet<usize> = universe
|
||||
.first()
|
||||
.unwrap()
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, _)| i)
|
||||
.filter(|i| universe.iter().all(|row| row[*i] == Cell::Void))
|
||||
.collect();
|
||||
|
||||
let galaxies: Vec<(usize, usize)> = universe
|
||||
.iter()
|
||||
.enumerate()
|
||||
.flat_map(|(i, row)| row.iter().enumerate().map(move |(j, cell)| (i, j, *cell)))
|
||||
.filter(|(_, _, cell)| *cell == Cell::Galaxy)
|
||||
.map(|(i, j, _)| (i, j))
|
||||
.collect();
|
||||
|
||||
let mut sum = 0_u64;
|
||||
for (i, g) in galaxies.iter().enumerate() {
|
||||
for (_j, h) in galaxies.iter().enumerate().skip(i + 1) {
|
||||
let mut x = [g.0, h.0];
|
||||
x.sort_unstable();
|
||||
let mut dist = (x[0] .. x[1])
|
||||
.map(|row| match empty_rows.contains(&row) {
|
||||
true => 2,
|
||||
false => 1
|
||||
})
|
||||
.sum::<u64>();
|
||||
|
||||
let mut y = [g.1, h.1];
|
||||
y.sort_unstable();
|
||||
dist += (y[0] .. y[1])
|
||||
.map(|col| match empty_cols.contains(&col) {
|
||||
true => 2,
|
||||
false => 1
|
||||
})
|
||||
.sum::<u64>();
|
||||
// eprintln!(" - Between galaxy {} and galaxy {}: {dist}", i + 1, _j + 1);
|
||||
sum += dist;
|
||||
}
|
||||
}
|
||||
println!("{sum}");
|
||||
|
||||
Ok(())
|
||||
}
|
Loading…
Reference in a new issue