Day 11 Complete
This commit is contained in:
parent
5c46e12269
commit
4082df6be8
140
src/input/day11
140
src/input/day11
@ -0,0 +1,140 @@
|
|||||||
|
...................#.....#...............#......................#......................#...................#...........................#....
|
||||||
|
..................................................#................................................#..............#.........................
|
||||||
|
......#.....#.................#..............................................................#..............................................
|
||||||
|
......................................................#..................#.....#............................................................
|
||||||
|
.....................................................................................#.....................................#................
|
||||||
|
.#............................................................................................................#.............................
|
||||||
|
..................#......................#............................#..............................................................#.....#
|
||||||
|
......................................................................................................#.............#.......................
|
||||||
|
..............................................#........#........................#................................................#..........
|
||||||
|
.....#......................#......................................#.....#...................#..............................................
|
||||||
|
.........................................................................................................#..................................
|
||||||
|
......................#...............#............#........................................................................................
|
||||||
|
..................................................................................................#.........................................
|
||||||
|
..........#..................................................................................................#..............#..........#....
|
||||||
|
....#...........................#..........................#..............................#.................................................
|
||||||
|
........................................#............................................#.................................#.........#..........
|
||||||
|
...................................................................#...........#..........................#.................................
|
||||||
|
............................................................................................................................................
|
||||||
|
............................................#...............................................................................................
|
||||||
|
....................#.................................#................................................................................#....
|
||||||
|
............................................................................................#...............................................
|
||||||
|
............................................................................#........#.........................................#............
|
||||||
|
...#...................#..........................#...............#......................................................#..................
|
||||||
|
..............................#........#....................................................................................................
|
||||||
|
................#................................................................................#.......................................#..
|
||||||
|
......#..............................................................#...................#..................................................
|
||||||
|
.#.........................................#..........#.........#..............#........................#............#......................
|
||||||
|
............................................................................................................................................
|
||||||
|
...........#...................................#...............................................................#.............#..............
|
||||||
|
........................#........#........................................#..........#..................................................#...
|
||||||
|
....#.....................................................#.................................#......................................#........
|
||||||
|
...............................................................#...................................#....................#...................
|
||||||
|
#.............................................................................#..................................#.............#............
|
||||||
|
.............................#..........#.............................#...................................#.................................
|
||||||
|
........................................................#...................................................................................
|
||||||
|
.............#........................................................................................................#................#....
|
||||||
|
...#.............................................#..................................#......#.....#..........................................
|
||||||
|
................................#..............................#............................................................................
|
||||||
|
...................#........................................................#...............................................................
|
||||||
|
#..........................#.........................................................................#......#...........#...................
|
||||||
|
.......#...........................#.....#..............#.................................................................................#.
|
||||||
|
......................#.........................#...........................................................................................
|
||||||
|
.....................................................................................................................#.......#......#.......
|
||||||
|
.............................................................#....................#...............#.........................................
|
||||||
|
.........#..................................................................................................................................
|
||||||
|
...............................#............#....................#.....#...............#..................#.................................
|
||||||
|
....#...........#.........#.........................#..............................................................#..................#.....
|
||||||
|
.....................#.......................................................................#..............................................
|
||||||
|
....................................................................................................#.......................................
|
||||||
|
.....................................#..........#...............................#...........................#..........#..........#.......#.
|
||||||
|
..........................................................................................#.................................................
|
||||||
|
.#..........................................#.............................#.................................................................
|
||||||
|
.................#...........#............................#.............................................#......................#............
|
||||||
|
.........#...........................................................#..............#.......................................................
|
||||||
|
..................................................................................................#.............#.......#...................
|
||||||
|
.............................................................................#.......................................................#......
|
||||||
|
......#.............#...........#..........#........#...........#...........................................#...............................
|
||||||
|
.........................................................................#..................................................................
|
||||||
|
........................................................#...........#...........#................................................#..........
|
||||||
|
........................................#....................#..........................................#.............#.....................
|
||||||
|
..........#...................#................................................................#..........................................#.
|
||||||
|
..................#.................................................................................#..........#............................
|
||||||
|
..........................................................................................#.................................................
|
||||||
|
..........................................................#...............#.................................................................
|
||||||
|
............#................................#......................#..........#.........................................#......#...........
|
||||||
|
..#.......................#..................................................................................#.....#........................
|
||||||
|
.................................................#...........................................#..............................................
|
||||||
|
.........#........#..................#...........................#.....................#...............#.............................#......
|
||||||
|
......................................................................#..........................#.....................#....................
|
||||||
|
............................................................................................................................................
|
||||||
|
........................#.....................................................................................#............#............#...
|
||||||
|
..............#............................#.................................#......#.......................................................
|
||||||
|
........#..........#........................................................................................................................
|
||||||
|
............................#............................................#..........................#.......................................
|
||||||
|
.......................................................#......#.........................................................#......#............
|
||||||
|
.........................................................................................#.....#..................#.........................
|
||||||
|
.......................#................#.......................................#............................#.......................#......
|
||||||
|
............................................................................................................................................
|
||||||
|
.........#.......................................................................................................................#..........
|
||||||
|
...#..........#................................#...........#......#.....................................................................#...
|
||||||
|
....................................................................................#.......................................................
|
||||||
|
.............................#.....................................................................................#.....#..................
|
||||||
|
...................................#.....................................................#.............#....................................
|
||||||
|
.....#.............#................................#......................................................................................#
|
||||||
|
.............#............................................#...................#.................#.....................#.....#......#........
|
||||||
|
#...............................#.........#..........................................#......................................................
|
||||||
|
.........................#...............................................#..................................................................
|
||||||
|
.................................................................................#......................................................#...
|
||||||
|
....#...........#..................................#......................................................#.................................
|
||||||
|
..............................................#.....................#.......................#...........................#...................
|
||||||
|
..............................#.........................#.............................................#.........#...........................
|
||||||
|
.........................................#.....................................#...............................................#............
|
||||||
|
.#.........#..................................................#..........................#...........................#......................
|
||||||
|
............................................................................................................................................
|
||||||
|
.........................................................................................................................................#..
|
||||||
|
.......#..........................................#.......................#................................................#........#.......
|
||||||
|
............................................................................................................................................
|
||||||
|
.................#.........#.........................................#.........................#.....#......#...............................
|
||||||
|
............................................#..........#......................#......#......................................................
|
||||||
|
....................................#.............................................................................#.........................
|
||||||
|
...........................................................#................................................................................
|
||||||
|
.................................................................................#........#...............#..............................#..
|
||||||
|
.......#...........#..............................#.........................................................................................
|
||||||
|
..#...............................................................................................#.................#............#..........
|
||||||
|
..............................................#..........#...............#..................................................................
|
||||||
|
..................................#.....#.....................#.......................#...............#......#.............#................
|
||||||
|
..........................#.................................................................................................................
|
||||||
|
....................................................#..................................................................#....................
|
||||||
|
...........................................................................#..............#.....#...........................................
|
||||||
|
#...................#...........................................................#...........................................................
|
||||||
|
...........................................#....................#....................................................................#......
|
||||||
|
.......#.....#........................................#....................................................#................................
|
||||||
|
..............................#...................................................................#.........................................
|
||||||
|
.............................................................................#.......................................#......................
|
||||||
|
.....................#....................................................................................................................#.
|
||||||
|
.................................#....................................#........................#............................................
|
||||||
|
......#...........................................#.........................................................................................
|
||||||
|
...........................................#................................................................................#......#........
|
||||||
|
..........#...............#.........................................................#.......................................................
|
||||||
|
..................#...........................................................#.............................................................
|
||||||
|
...............................................................#............................................#.......#.......................
|
||||||
|
....#........#...................................................................................#..........................................
|
||||||
|
......................#...................................................#...........#................#....................................
|
||||||
|
........#..............................................#...................................#....................#...........................
|
||||||
|
..................................................#.......................................................................#..........#......
|
||||||
|
.#...................................#..........................................................................................#...........
|
||||||
|
..........................................#........................................#...............#........................................
|
||||||
|
..........................#.....#........................................................................................................#..
|
||||||
|
..................#...........................#..........#...........................................................#......................
|
||||||
|
...................................................#......................#...................................................#.............
|
||||||
|
.........#................................................................................#.................................................
|
||||||
|
..............#................................................................#............................................................
|
||||||
|
...........................#.........#..............................#...................................#..........#....................#...
|
||||||
|
..................................................................................................#.............................#...........
|
||||||
|
..#..............................................#..........................................................................................
|
||||||
|
.................#.....................................................#.................#..................................................
|
||||||
|
.................................#.........#...................................................#......#.........#...........................
|
||||||
|
..........#.........................................#.....#......................#..........................................................
|
||||||
|
....................#..........................#................#...........................................................#......#........
|
||||||
|
#........................#.............#..................................#.................................#...............................
|
@ -0,0 +1,10 @@
|
|||||||
|
...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#.....
|
@ -0,0 +1,10 @@
|
|||||||
|
...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#.....
|
@ -18,7 +18,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
Box::new(day08::Day08 {}),
|
Box::new(day08::Day08 {}),
|
||||||
Box::new(day09::Day09 {}),
|
Box::new(day09::Day09 {}),
|
||||||
Box::new(day10::Day10 {}),
|
Box::new(day10::Day10 {}),
|
||||||
// Box::new(day11::Day11 {}),
|
Box::new(day11::Day11 {}),
|
||||||
// Box::new(day12::Day12 {}),
|
// Box::new(day12::Day12 {}),
|
||||||
// Box::new(day13::Day13 {}),
|
// Box::new(day13::Day13 {}),
|
||||||
// Box::new(day14::Day14 {}),
|
// Box::new(day14::Day14 {}),
|
||||||
|
@ -1,20 +1,30 @@
|
|||||||
use super::Solution;
|
use super::Solution;
|
||||||
|
|
||||||
|
use itertools::Itertools;
|
||||||
|
|
||||||
pub struct Day11 {}
|
pub struct Day11 {}
|
||||||
|
|
||||||
impl Solution for Day11 {
|
impl Solution for Day11 {
|
||||||
fn part1(
|
fn part1(
|
||||||
&self,
|
&self,
|
||||||
_input: &mut Vec<String>,
|
input: &mut Vec<String>,
|
||||||
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
Ok(Box::new("Ready"))
|
let (universe, mut galaxy) = self.get_universe(input);
|
||||||
|
|
||||||
|
Ok(Box::new(self.get_distance(&universe, &mut galaxy, 2)))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn part2(
|
fn part2(
|
||||||
&self,
|
&self,
|
||||||
_input: &mut Vec<String>,
|
input: &mut Vec<String>,
|
||||||
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
|
||||||
Ok(Box::new("Ready"))
|
let (universe, mut galaxy) = self.get_universe(input);
|
||||||
|
|
||||||
|
Ok(Box::new(self.get_distance(
|
||||||
|
&universe,
|
||||||
|
&mut galaxy,
|
||||||
|
1_000_000,
|
||||||
|
)))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_day(&self) -> u8 {
|
fn get_day(&self) -> u8 {
|
||||||
@ -22,7 +32,56 @@ impl Solution for Day11 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Day11 {}
|
impl Day11 {
|
||||||
|
fn get_universe<'a>(&'a self, input: &'a Vec<String>) -> (Vec<&'a [u8]>, Vec<(usize, usize)>) {
|
||||||
|
let universes = input.iter().map(|r| r.as_bytes()).collect::<Vec<_>>();
|
||||||
|
|
||||||
|
// Use the cartesian product between X and Y, (Y, X), to plot coords of galaxies
|
||||||
|
let galaxies = (0..universes.len())
|
||||||
|
.cartesian_product(0..universes[0].len())
|
||||||
|
.filter(|(y, x)| universes[*y][*x] == b'#')
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
(universes, galaxies)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_distance(
|
||||||
|
&self,
|
||||||
|
universe: &Vec<&[u8]>,
|
||||||
|
galaxies: &mut Vec<(usize, usize)>,
|
||||||
|
expansion: usize,
|
||||||
|
) -> usize {
|
||||||
|
let (rows, cols) = (universe.len(), universe[0].len());
|
||||||
|
|
||||||
|
let empty_rows = (0..rows).filter(|row| universe[*row].iter().all(|p| *p == b'.'));
|
||||||
|
let empty_cols = (0..cols).filter(|col| (0..rows).all(|row| universe[row][*col] == b'.'));
|
||||||
|
|
||||||
|
for row in empty_rows.rev() {
|
||||||
|
for galaxy in galaxies.iter_mut() {
|
||||||
|
// Increase distance between galaxies by 1 for each empty row they cross
|
||||||
|
if galaxy.0 > row {
|
||||||
|
galaxy.0 += expansion - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for col in empty_cols.rev() {
|
||||||
|
for galaxy in galaxies.iter_mut() {
|
||||||
|
// Increase distance between galaxies by 1 for each empty column they cross
|
||||||
|
if galaxy.1 > col {
|
||||||
|
galaxy.1 += expansion - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// get a vector of x, y distances between each galaxy
|
||||||
|
galaxies
|
||||||
|
.iter()
|
||||||
|
.tuple_combinations()
|
||||||
|
.map(|(g1, g2)| g1.0.abs_diff(g2.0) + g1.1.abs_diff(g2.1))
|
||||||
|
.sum()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Test from puzzle input
|
/// Test from puzzle input
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@ -44,7 +103,7 @@ mod test {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.to_string();
|
.to_string();
|
||||||
|
|
||||||
assert_eq!(answer, "Ready");
|
assert_eq!(answer, "374");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -61,6 +120,6 @@ mod test {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.to_string();
|
.to_string();
|
||||||
|
|
||||||
assert_eq!(answer, "Ready");
|
assert_eq!(answer, "82000210");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user