From bb03ac3dca346bb50e54ba55964fde975a6218eb Mon Sep 17 00:00:00 2001 From: Dominic Date: Mon, 11 Dec 2023 11:13:02 +0100 Subject: [PATCH] day 11 part 2 --- src/bin/day11.rs | 66 ++++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/src/bin/day11.rs b/src/bin/day11.rs index 4b4da3b..e272b54 100644 --- a/src/bin/day11.rs +++ b/src/bin/day11.rs @@ -27,6 +27,39 @@ fn parser() -> impl Parser>, Error = Simple> { .then_ignore(end()) } +fn sum_shortest_paths( + empty_rows: &HashSet, + empty_cols: &HashSet, + galaxies: &[(usize, usize)], + multiplier: u64 +) -> u64 { + let mut sum = 0; + 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 => multiplier, + false => 1 + }) + .sum::(); + + let mut y = [g.1, h.1]; + y.sort_unstable(); + dist += (y[0] .. y[1]) + .map(|col| match empty_cols.contains(&col) { + true => multiplier, + false => 1 + }) + .sum::(); + // eprintln!(" - Between galaxy {} and galaxy {}: {dist}", i + 1, _j + 1); + sum += dist; + } + } + sum +} + fn main() -> anyhow::Result<()> { let universe = read("inputs/day11.txt", parser())?; @@ -53,31 +86,14 @@ fn main() -> anyhow::Result<()> { .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::(); - - 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::(); - // eprintln!(" - Between galaxy {} and galaxy {}: {dist}", i + 1, _j + 1); - sum += dist; - } - } - println!("{sum}"); + println!( + "{}", + sum_shortest_paths(&empty_rows, &empty_cols, &galaxies, 2) + ); + println!( + "{}", + sum_shortest_paths(&empty_rows, &empty_cols, &galaxies, 1_000_000) + ); Ok(()) }