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