From 4df00cc74d368723960cd14475919261fae1053b Mon Sep 17 00:00:00 2001 From: Drew Galbraith Date: Mon, 11 Dec 2023 16:34:54 -0800 Subject: [PATCH] Day 11 done. --- input/day11.txt | 140 ++++++++++++++++++++++++++++++++++++++++++++++++ src/day11.rs | 48 +++++++++++++++++ src/main.rs | 3 ++ 3 files changed, 191 insertions(+) create mode 100644 input/day11.txt create mode 100644 src/day11.rs diff --git a/input/day11.txt b/input/day11.txt new file mode 100644 index 0000000..f99a74b --- /dev/null +++ b/input/day11.txt @@ -0,0 +1,140 @@ +...........................#.............#..........#.........#..................#.......#.............................................#.... +..............#...........................................................................................#...............#................. +.....................#...................................................................................................................... +...................................#................................#................................................#....................#. +.................#.......................................................#..........#..................#.............................#...... +...............................................................................................#.................#.......................... +......................................................#........................#........................................#................... +........#.....................................................#...........................#.................#............................... +.........................................#.....#...............................................................................#............ +...........................#.........................................................#...................................................#.. +.....#................................................................#............................................................#........ +.............#..........................................#.......................................#.................#.........#............... +............................................#............................................................................................... +.#...............#.....................#....................................#.............................#................................# +............................#....................#.......................................................................................... +...................................................................................................#..........#............................. +.......#............#.........................................#........#.........................................................#.......... +..............#.................................................................#..........#............................#................... +................................#........................................................................................................#.. +...............................................#.....................................................#...........#.......................... +#...............................................................#........................................................................... +............#......#...................................#....................................................#.............#.........#....... +.......................................................................................#.................................................... +....................................#........................#......#...........................#........................................... +.........#.....#.............#............#.....................................#.....................................#..................... +..........................................................................................................#.....#...............#..........# +........................................................#................................................................................... +..........................#................................................................................................................. +....#..................................................................#..................................................#................. +.....................#..........................................#...........................#.........#..................................... +...........#.........................#.......................................#......#.................................................#..... +#...............................................................................................#..................#............#........... +............................#.............#.........#....................................................................................... +........#...........................................................#....................................................................... +.........................................................................#..........................#....................................... +..#..........#............................................#.....#.....................#...............................#..................... +.....................................#...............................................................................................#...... +....................#......................#....................................................................................#........... +.....#...................................................................................................................................... +................................#....................#............................#......................................................... +........................#......................................................................#.............................#.............. +.......................................................................#.................................................................... +..............#.................................#......................................................#.......#..................#.......#. +............................................................#............................#.................................................. +..........................................................................................................................#................. +..#.................#.........#............................................#.......#........................................................ +.......#.............................................#........................................#.......................#..................... +...............................................................#.................................................................#.......... +...........................#...............#.......................................................#.....................................#.. +.................................#..............#...............................................................#........................... +...............#........................................................................#................................................... +.........................................................#......................................#..........#................................ +..#......................................#................................#................................................................. +...............................#............................................................#..............................................# +..........#........#............................................#...............................................................#........... +................................................................................#..................#...........#..........#................. +..................................#........#................................................................................................ +............................................................................................................................................ +.....................#............................................#............................#.......#.....................#.............. +............................#........................#.....................#..........#..........................#.....................#.... +.........................................................................................................................#.................. +.#.........#...........................#.......................#...................................#........................................ +................#........#.....................................................................................................#..........#. +...........................................................................................#.................#.............................. +...............................#......................................#............................................#........................ +.........................................#.......#......................................................#................................... +..........#..................................................#.................#............................................................ +#.......................#..............................................................#...........................................#.......# +.................................#......................#........................................................#........#................. +............................................................................................................................................ +...............................................#...............................................#............................................ +................#.....................#.......................................#............................................................. +......................................................#...............#..................................................................... +...................................................................................#.............................................#.......... +..................................................................#........#....................................#........................... +.#.......................................................#.................................#............#................................... +............................................................................................................................................ +........#.......................#................................................#.........................................#................ +..................#......#......................................................................#........................................... +......................................#...............#..........#.....................................................................#.... +...#....................................................................................#................................................... +...............#..............................#.............................#............................................................... +...................................#..............................................................#.....#........................#.........# +.......#............#...................................................................................................#................... +...........................#.................................................................#................#............................. +.....................................................#...............................................#...................................... +...........#..............................................#................................................................................. +..............................................#.................#...............#.........#................................................. +................#.......#...........#.................................#...................................#................................. +.....................................................................................#...........#...................#...................... +........................................................#......................................................................#.......#.... +.....#......................#............................................................................................................... +.............#........#..........................#..........................................................#.............#................# +............................................................................................................................................ +........#............................#............................................#..........#.............................................. +............................................#...................................................................#........................... +............................................................................................................................................ +..#..............#......#.........................................#...............................#......................................... +....................................................#......................#.......................................................#......#. +...................................#........................#................................................................#.............. +.....................................................................#...........#.......................................................... +...............#.............................#...........................................................#.................................. +..........#..............................................................................#.....#.................#.......................... +.....................................................................................................................................#...... +.#................................#.........................................................................#............................... +........................#.........................................#......#.........#................#....................................... +.................#........................................#..................................................................#.............. +........................................#................................................................................................... +....#.....#........................................#............................................#........................................... +............................................................................................................................................ +..............................................................................#.....................................#................#...... +.....................#................................................................#.........................................#........... +.............................#.........#........#.........#.............#...........................#....................................... +................................................................#.........................#..................#............#.............#... +........#.......................................................................#........................................................... +........................#..................#............................................................#................................... +.....................................#.................................................#.........#................#......................... +...................................................#.....................#....................................................#............# +............................................................................................................................................ +................#..............................................#.................#............................#............................. +....#........................#..........................#............#...................................................................... +....................................#........................................................#.............................................. +.......................#..........................................................................#.....#...........#............#.......... +........#..................................#................#.............#...........................................................#..... +................................................#.......................................................................#..................# +..................#.................................................................#....................................................... +............#........................#...........................................................................#.............#............ +...#........................................................................................................................................ +..........................................#.................................#................#.............................................. +.......................#............................#.............#...................................................#.............#....... +.................................#....................................................#........................#............................ +.................................................................................#........................................................#. +..........................................................#.............................................#................................... +...#............#........................................................................................................................... +..............................................#...................................................#......................................... +.........................................................................#.....#.......#.........................................#.......... +............#.........#......................................................................#........#..................................... +...........................#........................................#........................................#.......................#...... +.....#.................................#..............#........#.....................................................#...................... +...............................#............................................#........#....................................#................. diff --git a/src/day11.rs b/src/day11.rs new file mode 100644 index 0000000..7e3aceb --- /dev/null +++ b/src/day11.rs @@ -0,0 +1,48 @@ +use std::io; + +pub fn sum_pairs(universe: &Vec>, ratio: u64) -> u64 { + let mut empty_columns: Vec = vec![true; universe[0].len()]; + let mut empty_rows: Vec = vec![true; universe.len()]; + + let mut galaxies: Vec<(usize, usize)> = Vec::new(); + for r in 0..universe.len() { + for c in 0..universe[r].len() { + if universe[r][c] == '#' { + empty_rows[r] = false; + empty_columns[c] = false; + galaxies.push((r, c)); + } + } + } + + let mut sum: u64 = 0; + for i in 0..galaxies.len() { + let (r1, c1) = galaxies[i]; + for j in (i + 1)..galaxies.len() { + let (r2, c2) = galaxies[j]; + let rmin = r1.min(r2); + let rmax = r1.max(r2); + let cmin = c1.min(c2); + let cmax = c1.max(c2); + + let cartdistance = ((rmax - rmin) + (cmax - cmin)) as u64; + let addcols = empty_columns[cmin..=cmax].iter().filter(|b| **b).count() as u64; + let addrows = empty_rows[rmin..=rmax].iter().filter(|b| **b).count() as u64; + sum += cartdistance + (addcols * ratio) + (addrows * ratio); + } + } + + sum +} + +pub fn sum_lengths(ratio: u64) -> u64 { + let mut buffer = String::new(); + + let mut universe: Vec> = Vec::new(); + while io::stdin().read_line(&mut buffer).unwrap() > 0 { + universe.push(buffer.trim().chars().collect()); + buffer = String::new(); + } + + sum_pairs(&universe, ratio) +} diff --git a/src/main.rs b/src/main.rs index 8e67dfb..dea1e29 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::env; mod day1; mod day10; +mod day11; mod day2; mod day3; mod day4; @@ -38,6 +39,8 @@ fn main() { "day9b" => println!("Sum: {}", day9::sum_next(true)), "day10a" => println!("Steps: {}", day10::num_steps().0), "day10b" => println!("Contains: {}", day10::num_steps().1), + "day11a" => println!("Sum: {}", day11::sum_lengths(1)), + "day11b" => println!("Sum: {}", day11::sum_lengths(999999)), _ => println!("Unrecognized day: {}", args[1]), } }