adventofcode

git clone https://git.ce9e.org/adventofcode.git

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