From 1c202ae46c38af3f6f4e31ca0a6d73186ed92945 Mon Sep 17 00:00:00 2001 From: dobiadi <50926840+dobiadi@users.noreply.github.com> Date: Tue, 12 Dec 2023 22:54:08 +0100 Subject: [PATCH] Day11 C --- day11/c/day11 | Bin 0 -> 16224 bytes day11/c/day11.c | 131 ++++++++++++++++++++++++++++++++++++++++++++ day11/input.txt | 140 +++++++++++++++++++++++++++++++++++++++++++++++ day11/sample.txt | 10 ++++ 4 files changed, 281 insertions(+) create mode 100755 day11/c/day11 create mode 100644 day11/c/day11.c create mode 100644 day11/input.txt create mode 100644 day11/sample.txt diff --git a/day11/c/day11 b/day11/c/day11 new file mode 100755 index 0000000000000000000000000000000000000000..7a1ed307cc8fdb551dd1f65706a966044c1e1f08 GIT binary patch literal 16224 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 literal 0 HcmV?d00001 diff --git a/day11/c/day11.c b/day11/c/day11.c new file mode 100644 index 0000000..c2f2536 --- /dev/null +++ b/day11/c/day11.c @@ -0,0 +1,131 @@ +#include +#include +#include + +#define LINE_MAX_LENGTH 256 +#define MAX_GALAXIES 1024 +#define abs(a) ((a) > 0 ? (a) : -(a)) +#define PART2 1 +#define EXPANSION_RATE (PART2 ? 999999 : 1) + +typedef enum tile { + EMPTY, + GALAXY +} tile_t; + +typedef struct position { + int x; + int y; +} position_t; + +void expand_universe(int universe_x, int universe_y, tile_t universe[LINE_MAX_LENGTH][LINE_MAX_LENGTH], position_t galaxies[], int galaxies_num, int expansion_rate); + +int main() { + char *p, *buf, c; + + buf = (char *)malloc(LINE_MAX_LENGTH); + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + + tile_t universe[LINE_MAX_LENGTH][LINE_MAX_LENGTH]; + memset(universe, 0, LINE_MAX_LENGTH*LINE_MAX_LENGTH*sizeof(tile_t)); + + position_t galaxies[MAX_GALAXIES]; + memset(galaxies, 0, MAX_GALAXIES*sizeof(position_t)); + + int x = 0, y = 0, galaxies_num = 0; + + while ((c = getchar()) != EOF) { + *p++ = c; + if (c == '\n') { + x = 0; + + p = buf; + while (*p != '\n') { + switch (*p) { + case '.': + universe[x][y] = EMPTY; + break; + case '#': + universe[x][y] = GALAXY; + galaxies[galaxies_num].x = x; + galaxies[galaxies_num].y = y; + galaxies_num++; + break; + } + x++; + p++; + } + + + y++; + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + } + } + + expand_universe(x, y, universe, galaxies, galaxies_num, EXPANSION_RATE); + + unsigned long part1 = 0; + + for (int i = 0; i < galaxies_num; i++) { + for (int j = i; j < galaxies_num; j++) { + part1 += abs(galaxies[i].x - galaxies[j].x); + part1 += abs(galaxies[i].y - galaxies[j].y); + } + } + + printf("%lu\n", part1); + + free(buf); +} + +void expand_universe(int universe_x, int universe_y, tile_t universe[LINE_MAX_LENGTH][LINE_MAX_LENGTH], position_t galaxies[], int galaxies_num, int expansion_rate) { + int empty; + position_t galaxy_offsets[MAX_GALAXIES]; + memset(galaxy_offsets, 0, MAX_GALAXIES*sizeof(position_t)); + // Empty rows + for (int i = 0; i < universe_y; i++) { + empty = 1; + for (int j = 0; j < universe_x; j++) { + if (universe[j][i] != EMPTY) { + empty = 0; + break; + } + } + + if (empty) { + // Shift existing galaxies + for (int k = 0; k < galaxies_num; k++) { + if (galaxies[k].y > i) { + galaxy_offsets[k].y += expansion_rate; + } + } + } + } + // Empty columns + for (int i = 0; i < universe_x; i++) { + empty = 1; + for (int j = 0; j < universe_y; j++) { + if (universe[i][j] != EMPTY) { + empty = 0; + break; + } + } + + if (empty) { + // Shift existing galaxies + for (int k = 0; k < galaxies_num; k++) { + if (galaxies[k].x > i) { + galaxy_offsets[k].x += expansion_rate; + } + } + } + } + + + for (int i = 0; i < galaxies_num; i++) { + galaxies[i].x += galaxy_offsets[i].x; + galaxies[i].y += galaxy_offsets[i].y; + } +} diff --git a/day11/input.txt b/day11/input.txt new file mode 100644 index 0000000..c36c3b8 --- /dev/null +++ b/day11/input.txt @@ -0,0 +1,140 @@ +.....#.....#......#.............................#........#.......................#...........#.............................................. +#......................................#....................................................................#........................#...... +.................................................................................................#...........................#.............. +............................#......#.................................................................................#...................... +..............#.............................................#..............................................................................# +....................................................#....................#.................................................................. +..........................................................................................................#................................. +...#...............#.............#...................................#.........#..................#...............................#......... +........#................................#...................................................................................#.............. +..........................................................#................#................................................................ +....................................................................................................................#....................... +.....................................#...................................................................................................... +.....................#.......................................#...........................#..........................................#....... +.............#.........................................................#........#........................................................... +......#.......................#..................#...................................#..............#........................#.............. +.................#........................#..........................................................................#.....................# +............................................................................................................................................ +..........#....................................................#...........#................#..............#................................ +...........................#....................................................................................................#........... +............................................................................................................................................ +...#...................#..............#........#...................#..................................................#..................... +..........................................................#.....................................#........................................... +...............................................................................#........................#.............................#..... +.............#.................#............................................................................................................ +...................................................................................#................#....................................... +............................................#...........................#................#...........................#...................... +.................#..........................................#............................................................................#.. +......#............................................................#.............................................#.......................... +.........................#...........#..........#...............................................#.........................#................. +..#...................................................#...........................#.....................#................................... +............................................................................................................................................ +.........#....................#...........................................#.........................................#...........#........... +.......................................#....................#.............................#................................................. +..............#...................................................#.......................................#................................. +............................................................................................................................................ +...#................#....................................................................................................................#.. +............................................#...........................................#................................................... +......................................................#...............................................#..................................... +.................#...............#.........................#........#..........................#......................#.....#............... +......#....................#.............#.....#...........................................................#................................ +...........#.........#...........................................................#..............................#........................... +.......................................................................................................................................#.... +............................................#.......................................................#.........................#............. +.......................................................................#.................................................#.................. +...#.......................................................#......#.........................#.............................................#. +...............................#.................#.......................................................................................... +..................#.....#...........#........................................#.....................................#........................ +......................................................................................................................................#..... +..........#..............................................................#.................................................................. +.............................................................................................#...................................#.......... +#....................#..................#..............#.................................................................................... +...................................#............................#.....#.....................................................#...........#... +..........................................................................................#.........#..............#........................ +.....#.........................................#............................................................#............................... +.............#.......................................................................................................................#...... +...........................................................#..............#...............................................................#. +......................................................................................................#..................................... +........................#........#..................#.................................#.....#............................................... +.........#...............................#.....................................#............................................................ +..............................................................#...............................................#............#................ +............................................................................................................................................ +#............#...............................#.............................................................................................. +......................#......#...........................#.............................................................#.................... +............................................................................................................................................ +....#..............................#.........................#.....................#...............#........................................ +.............................................................................#....................................#......................... +........#........#.......#.............................................................#..................................................#. +........................................................................................................................#................... +.#..............................#................#..............#......#.................................................................... +.........................................................................................................#......#........................... +...............#...........#...........#....................#..............................................................#.....#.......... +....#..............................................................................#.....#.................................................. +............................................................................................................................................ +..........#.......................#..........#.............................#................................................................ +.............................................................................................................#.......#...................... +............................................................................................................................................ +......................................................#.........#........................................................................... +...........................................#................................................#.................................#............. +.........................#...........#...........#..........#................#..................................#...................#.....#. +............#.......................................................#................#..................#................................... +.....#...............#.........#.........................................#.................................................................. +.........................................................#.................................................................................. +..............................................#............................................................................................. +..........#.................................................................................................#...............#............... +.......................................#.......................#........................#........................#.......................... +..............#.........#......................................................#............................................................ +.............................#..............#.........#.......................................#......#...............................#...... +......................................................................#...................................................................#. +....#....................................................................................................................................... +.........#.............................................................................................................#.................... +...................................#....................#........................#............................................#............. +.....................#.....................................................#................................................................ +......#.............................................................#...................#...............#...........................#....... +...............#.............................#.................#..........................................................#................. +.................................#......#.........................................................#......................................... +................................................................................#.................................#............#.........#.. +.......................................................#..............#..................................................................... +...#......#..........#......#................................#............................................#................................. +..................................................#...................................................................#..................... +......................................................................................................#..................................... +...................................................................#..........................................................#............. +...................#....................#................#...............#.................................................................. +#..........................#..................................#......................#......................#......................#.......# +.................................................#.......................................................................................... +...............................#....................................................................#............#.......................... +.............................................................................................#............................#................. +..........#.............#.................................................#.............................................................#... +.#................#........................#...................................#............................................................ +................................................#........................................................................................... +...........................................................#............................................#................................... +.......#.......#....................................#...................................#................................................... +.................................#.............................#...................................#..........#........#.................... +...........................#...........#......#...............................................#..................................#.......... +..#.....................................................#.................#......#.......................................................... +..................#................................................#....................................................................#... +............................................................................................................................................ +...........................................................#.................#........#..................................................... +#...............................#..........#.............................................................................#.................. +.......#.................#............................................#.........................#...........#.......................#....... +............................................................................................................................................ +.............#...................................#.......................................................................................... +................................................................................#........................................................... +.#...............#.............#..............................................................#...................................#.......#. +.......................................................................................#..............................#..................... +......................................#................................................................#.....#........................#..... +...........................#..........................#..................................................................................... +........#...................................#.............................................................................#................. +..............#............................................#....................................#........................................... +......................#...................................................................#................................................. +..................................#..................................#......#............................................................... +.............................................................................................................................#.............. +.#...............................................#....................................................#............#................#....... +............#..........................#.........................#.......................................................................... +........................#....................#.............................................................................................# +........................................................................................#.................#..............#.................. +............................................................................................................................................ +..............................................................#.......#..............................................#...................... +........#.....................#.....#.............................................................#....................................#.... +......................#...................................#.......#......................................................................... +..#.............#...........................#.....................................#...........................#.............#............... diff --git a/day11/sample.txt b/day11/sample.txt new file mode 100644 index 0000000..986aad4 --- /dev/null +++ b/day11/sample.txt @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#.....