- 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 #...#.....