- commit
- 3f26ef6152303dafcb0d253a85e827be2e6e3b68
- parent
- 61e3b0fd22eeaf8cf0762d0d22aa621039ac5ef2
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-12-11 09:06
2023-12-11
Diffstat
A | 2023/11/input.txt | 140 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | 2023/11/solution.rs | 73 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | 2023/11/test.txt | 10 | ++++++++++ |
3 files changed, 223 insertions, 0 deletions
diff --git a/2023/11/input.txt b/2023/11/input.txt
@@ -0,0 +1,140 @@ -1 1 ...........#...............................................#...................#.....#.............#........................................ -1 2 ..................#..................................#..................#.....................#................#...................#.......# -1 3 ....#........................................................................................................................#.............. -1 4 ..............................#........#..................................................#................................................. -1 5 .............#........#...........................#..........................#..............................#............................... -1 6 ......................................................................................................#.............#....................... -1 7 ...........................................................#......................#........................................#................ -1 8 .........#.....................................#.......................#..................................................................#. -1 9 ..................#.......#....................................................................#...................................#........ -1 10 #..........................................#...............................................................#......#......................... -1 11 ..................................................#......................................................................................... -1 12 ..............................................................#.....#....................#.................................................. -1 13 ......#..............................#...................................................................................................... -1 14 ...............................................#......#.................#..........#................................#....................... -1 15 ..............................................................................#........................#.................................#.. -1 16 .............#....................................................................................#............................#............ -1 17 .......................#.............................................#...................................................................... -1 18 ...............................#....................#.........................................#.....................................#....... -1 19 ..........#.................................................................................................#............................... -1 20 ..........................................................................#.......#..........................................#.............. -1 21 ...#..............................#............................#....................................#..................#.................... -1 22 ..................#..........................#....................................................................................#......... -1 23 .........................#.........................#.......#..........#...................#................................................. -1 24 ........#.....#.............................................................#...................#........#.................................. -1 25 ..............................#.........#......................................................................................#......#..... -1 26 ......................................................#......................................................#.............................. -1 27 ....................................................................................................#....................................... -1 28 .............................................................#.......#.....................#.......................#...............#........ -1 29 ..#...................#......................................................................................................#.............. -1 30 ......................................#..........................#.....................#.................................................... -1 31 .............#.............................................................................................................................. -1 32 ...............................#.................#.........................#...................#..............#............................. -1 33 ........................#...........................................................#................................................#...... -1 34 ........................................#................................................#..........#......................................# -1 35 ......................................................................#............................................#......#................. -1 36 ............................................................................................................................................ -1 37 ...........#................................................#.................................#............................................. -1 38 .....................................#......#............................................................................................... -1 39 ....#............#..................................................#.............#....................#..........................#......... -1 40 ............................................................................................................................................ -1 41 .......................#.....#...........#............................................................................#..................#.. -1 42 .......#................................................#...............................#......#............................................ -1 43 ...................................#...........................#...........#....................................#........................... -1 44 #.............................................................................................................................#............. -1 45 ...............................#...........................#......................#.......................#................................. -1 46 ............#.............#..................#.............................................................................................. -1 47 ....................................................#...............#........#.........#...........................................#........ -1 48 ...............................................................................................................#......#...................#. -1 49 .......#.............#..............#....................................................................................................... -1 50 .............................................................................................................................#.............. -1 51 ............................................................................................................................................ -1 52 .................#............#...............................#.......#......................#..........#...............#................... -1 53 ........................#..........................................................#................................................#....... -1 54 .#.................................................#........................................................................................ -1 55 ...........#.................................#.....................................................#........................................ -1 56 ......................................#.....................................................................#......#........................ -1 57 .......#............#...................................................#.............................................................#..... -1 58 ...............#.....................................#........#...............#............................................#...............# -1 59 ...................................................................#....................#................................................... -1 60 .................................................#.......................................................................................... -1 61 ..................#........................#..................................................#.......#...............#..................... -1 62 ............................................................................................................................................ -1 63 ......#...........................#..............................#..........................................................#............... -1 64 ...........................................................#.....................................................#.......................... -1 65 ...........................#........................#..............................................................................#......#. -1 66 ...........#..............................................................#..................................#.............................. -1 67 ..........................................#................................................................................................. -1 68 ...#..........................................................#.........................#.......................................#........... -1 69 ........................................................#......................#..........................#..........................#...... -1 70 .......................#.............................................#.............................#........................................ -1 71 .......................................................................................................................#.................... -1 72 ......#......#....................#......................................................................................................... -1 73 ...............................................................#............#......#.....#..............#..........#..........#............. -1 74 .#...............#.....................#......#.....#....................................................................................... -1 75 ...................................................................#.........................#...........................................#.. -1 76 ............................................................................................................................................ -1 77 ...........................................#...........................#..............................#..................................... -1 78 ......#....................................................#....................#..............................#....................#....... -1 79 ......................#.......#....................#........................................................................................ -1 80 ............#.................................#................#...............................#....................#....................... -1 81 .......................................#.................................................................................................#.. -1 82 ............................................................................................................................................ -1 83 ...#.....................#.........................................#...................#....................#....................#.......... -1 84 .................#..............#.....................................................................................................#..... -1 85 ...........................................................................#....................#.................#......................... -1 86 .......#...................................................................................#................................................ -1 87 ............#..........#.................................................................................................................... -1 88 ......................................................................#.......#.............................................#............... -1 89 ........................................................................................................#................................... -1 90 ....#.........................................................#............................................................................. -1 91 ..........#....................#....................#......................#..................#......................#...................... -1 92 #...............#...................#.........#..........#...................................................#.............................. -1 93 ...................................................................................................................................#........ -1 94 ............................#.........................................................#..................................................... -1 95 ..........................................#...................................#............................................................. -1 96 ...#.................................................#.................................................................#.....#.............# -1 97 ......................#............#................................#...............................#.............#..................#...... -1 98 .........................................................................................................#.................................. -1 99 ............#.....................................#.......................#...............#...................#............................. -1 100 .#....................................#.....#....................................................................................#.......... -1 101 ........#........................................................#.......................................................................... -1 102 ...................#........#............................#.............................#..............................#..................... -1 103 ..............................................................................................................................#............. -1 104 ....................................................#..........................#............................................................ -1 105 ........................#.......................................................................#............#............................#. -1 106 ..........................................#................................................................................#................ -1 107 ..................#..........................................#.........................................#..............................#..... -1 108 .............#...................................#..................#........................#.............................................. -1 109 .............................#...........................#......................#..................#........................................ -1 110 ...................................#................................................................................#........#.............. -1 111 ......#.................................................................#..............#.................................................... -1 112 .................#.........................................................................................#................................ -1 113 ............................................................................................................................................ -1 114 ...........................#...........#.........................................#...................#................#............#.....#.. -1 115 .#..........................................................................................#............................................... -1 116 .....................#............................#.....#...................#....................................#.......................... -1 117 .............................................#.................#......................#..................................................... -1 118 ...................................#................................#....................................................................... -1 119 ......................................................................................................#..................................... -1 120 ......#.....#....................................................................................#.............................#.....#...... -1 121 .......................#...................#........#......................................#................................................ -1 122 .............................................................................................................#.............................. -1 123 #................#..........#........#..........#.......#......#........................................................................#... -1 124 .....................................................................#.........#........#.....#......#.................#.................... -1 125 ................................#........................................................................................................... -1 126 .........................#..............#....................................................................................#.............. -1 127 ..........#................................................................................................................................. -1 128 ..........................................................................................#........#........................................ -1 129 .................#...................#..........#.......#......#...................................................#...............#........ -1 130 ............................................................................................................................................ -1 131 .............................#................................................................#............................................. -1 132 ...#.......#................................................................#........#...................#............#.........#..........# -1 133 ........................#.................#................#................................................................................ -1 134 .....................................................................#.....................................................#................ -1 135 ....................................................#............................#......................................................#... -1 136 .#..........................................................................................#......#...............#..............#......... -1 137 ............................................................................................................................................ -1 138 ..........#........#............#.........................................................................#................................. -1 139 ........................................................#..........#........................................................................ -1 140 .....#.............................................#.........#....................#.............................#.........#.................
diff --git a/2023/11/solution.rs b/2023/11/solution.rs
@@ -0,0 +1,73 @@ -1 1 #[path = "../lib.rs"] -1 2 mod lib; -1 3 -1 4 fn parse() -> Vec<(usize, usize)> { -1 5 let mut galaxies = vec![]; -1 6 for (y, line) in lib::iter_input().enumerate() { -1 7 for (x, c) in line.chars().enumerate() { -1 8 if c == '#' { -1 9 galaxies.push((x, y)); -1 10 } -1 11 } -1 12 } -1 13 return galaxies; -1 14 } -1 15 -1 16 fn expand(galaxies: &Vec<(usize, usize)>, factor: usize) -> Vec<(usize, usize)> { -1 17 let mut current = galaxies.clone(); -1 18 current.sort_unstable_by_key(|(x, _)| *x); -1 19 -1 20 let mut expanded = vec![]; -1 21 let mut offset = 0; -1 22 let mut prev = 0; -1 23 -1 24 for (x, y) in current.iter() { -1 25 if *x > prev { -1 26 offset += (*x - prev - 1) * (factor - 1); -1 27 } -1 28 expanded.push((*x + offset, *y)); -1 29 prev = *x; -1 30 } -1 31 -1 32 current = expanded; -1 33 current.sort_unstable_by_key(|(_, y)| *y); -1 34 expanded = vec![]; -1 35 offset = 0; -1 36 prev = 0; -1 37 -1 38 for (x, y) in current.iter() { -1 39 if *y > prev { -1 40 offset += (*y - prev - 1) * (factor - 1); -1 41 } -1 42 expanded.push((*x, *y + offset)); -1 43 prev = *y; -1 44 } -1 45 -1 46 return expanded; -1 47 } -1 48 -1 49 fn count_distances(galaxies: &Vec<(usize, usize)>) -> usize { -1 50 let mut sum = 0; -1 51 for i in 0..galaxies.len() { -1 52 let (x1, y1) = galaxies[i]; -1 53 for j in (i + 1)..galaxies.len() { -1 54 let (x2, y2) = galaxies[j]; -1 55 sum += x1.abs_diff(x2) + y1.abs_diff(y2); -1 56 } -1 57 } -1 58 return sum; -1 59 } -1 60 -1 61 fn main() { -1 62 for _ in 0..1000 { -1 63 let galaxies = parse(); -1 64 -1 65 let expanded1 = expand(&galaxies, 2); -1 66 let sum1 = count_distances(&expanded1); -1 67 println!("part1: {}", sum1); -1 68 -1 69 let expanded2 = expand(&galaxies, 1_000_000); -1 70 let sum2 = count_distances(&expanded2); -1 71 println!("part2: {}", sum2); -1 72 } -1 73 }
diff --git a/2023/11/test.txt b/2023/11/test.txt
@@ -0,0 +1,10 @@ -1 1 ...#...... -1 2 .......#.. -1 3 #......... -1 4 .......... -1 5 ......#... -1 6 .#........ -1 7 .........# -1 8 .......... -1 9 .......#.. -1 10 #...#.....