Day11 C
This commit is contained in:
BIN
day11/c/day11
Executable file
BIN
day11/c/day11
Executable file
Binary file not shown.
131
day11/c/day11.c
Normal file
131
day11/c/day11.c
Normal file
@@ -0,0 +1,131 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
}
|
||||
140
day11/input.txt
Normal file
140
day11/input.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
.....#.....#......#.............................#........#.......................#...........#..............................................
|
||||
#......................................#....................................................................#........................#......
|
||||
.................................................................................................#...........................#..............
|
||||
............................#......#.................................................................................#......................
|
||||
..............#.............................................#..............................................................................#
|
||||
....................................................#....................#..................................................................
|
||||
..........................................................................................................#.................................
|
||||
...#...............#.............#...................................#.........#..................#...............................#.........
|
||||
........#................................#...................................................................................#..............
|
||||
..........................................................#................#................................................................
|
||||
....................................................................................................................#.......................
|
||||
.....................................#......................................................................................................
|
||||
.....................#.......................................#...........................#..........................................#.......
|
||||
.............#.........................................................#........#...........................................................
|
||||
......#.......................#..................#...................................#..............#........................#..............
|
||||
.................#........................#..........................................................................#.....................#
|
||||
............................................................................................................................................
|
||||
..........#....................................................#...........#................#..............#................................
|
||||
...........................#....................................................................................................#...........
|
||||
............................................................................................................................................
|
||||
...#...................#..............#........#...................#..................................................#.....................
|
||||
..........................................................#.....................................#...........................................
|
||||
...............................................................................#........................#.............................#.....
|
||||
.............#.................#............................................................................................................
|
||||
...................................................................................#................#.......................................
|
||||
............................................#...........................#................#...........................#......................
|
||||
.................#..........................................#............................................................................#..
|
||||
......#............................................................#.............................................#..........................
|
||||
.........................#...........#..........#...............................................#.........................#.................
|
||||
..#...................................................#...........................#.....................#...................................
|
||||
............................................................................................................................................
|
||||
.........#....................#...........................................#.........................................#...........#...........
|
||||
.......................................#....................#.............................#.................................................
|
||||
..............#...................................................#.......................................#.................................
|
||||
............................................................................................................................................
|
||||
...#................#....................................................................................................................#..
|
||||
............................................#...........................................#...................................................
|
||||
......................................................#...............................................#.....................................
|
||||
.................#...............#.........................#........#..........................#......................#.....#...............
|
||||
......#....................#.............#.....#...........................................................#................................
|
||||
...........#.........#...........................................................#..............................#...........................
|
||||
.......................................................................................................................................#....
|
||||
............................................#.......................................................#.........................#.............
|
||||
.......................................................................#.................................................#..................
|
||||
...#.......................................................#......#.........................#.............................................#.
|
||||
...............................#.................#..........................................................................................
|
||||
..................#.....#...........#........................................#.....................................#........................
|
||||
......................................................................................................................................#.....
|
||||
..........#..............................................................#..................................................................
|
||||
.............................................................................................#...................................#..........
|
||||
#....................#..................#..............#....................................................................................
|
||||
...................................#............................#.....#.....................................................#...........#...
|
||||
..........................................................................................#.........#..............#........................
|
||||
.....#.........................................#............................................................#...............................
|
||||
.............#.......................................................................................................................#......
|
||||
...........................................................#..............#...............................................................#.
|
||||
......................................................................................................#.....................................
|
||||
........................#........#..................#.................................#.....#...............................................
|
||||
.........#...............................#.....................................#............................................................
|
||||
..............................................................#...............................................#............#................
|
||||
............................................................................................................................................
|
||||
#............#...............................#..............................................................................................
|
||||
......................#......#...........................#.............................................................#....................
|
||||
............................................................................................................................................
|
||||
....#..............................#.........................#.....................#...............#........................................
|
||||
.............................................................................#....................................#.........................
|
||||
........#........#.......#.............................................................#..................................................#.
|
||||
........................................................................................................................#...................
|
||||
.#..............................#................#..............#......#....................................................................
|
||||
.........................................................................................................#......#...........................
|
||||
...............#...........#...........#....................#..............................................................#.....#..........
|
||||
....#..............................................................................#.....#..................................................
|
||||
............................................................................................................................................
|
||||
..........#.......................#..........#.............................#................................................................
|
||||
.............................................................................................................#.......#......................
|
||||
............................................................................................................................................
|
||||
......................................................#.........#...........................................................................
|
||||
...........................................#................................................#.................................#.............
|
||||
.........................#...........#...........#..........#................#..................................#...................#.....#.
|
||||
............#.......................................................#................#..................#...................................
|
||||
.....#...............#.........#.........................................#..................................................................
|
||||
.........................................................#..................................................................................
|
||||
..............................................#.............................................................................................
|
||||
..........#.................................................................................................#...............#...............
|
||||
.......................................#.......................#........................#........................#..........................
|
||||
..............#.........#......................................................#............................................................
|
||||
.............................#..............#.........#.......................................#......#...............................#......
|
||||
......................................................................#...................................................................#.
|
||||
....#.......................................................................................................................................
|
||||
.........#.............................................................................................................#....................
|
||||
...................................#....................#........................#............................................#.............
|
||||
.....................#.....................................................#................................................................
|
||||
......#.............................................................#...................#...............#...........................#.......
|
||||
...............#.............................#.................#..........................................................#.................
|
||||
.................................#......#.........................................................#.........................................
|
||||
................................................................................#.................................#............#.........#..
|
||||
.......................................................#..............#.....................................................................
|
||||
...#......#..........#......#................................#............................................#.................................
|
||||
..................................................#...................................................................#.....................
|
||||
......................................................................................................#.....................................
|
||||
...................................................................#..........................................................#.............
|
||||
...................#....................#................#...............#..................................................................
|
||||
#..........................#..................................#......................#......................#......................#.......#
|
||||
.................................................#..........................................................................................
|
||||
...............................#....................................................................#............#..........................
|
||||
.............................................................................................#............................#.................
|
||||
..........#.............#.................................................#.............................................................#...
|
||||
.#................#........................#...................................#............................................................
|
||||
................................................#...........................................................................................
|
||||
...........................................................#............................................#...................................
|
||||
.......#.......#....................................#...................................#...................................................
|
||||
.................................#.............................#...................................#..........#........#....................
|
||||
...........................#...........#......#...............................................#..................................#..........
|
||||
..#.....................................................#.................#......#..........................................................
|
||||
..................#................................................#....................................................................#...
|
||||
............................................................................................................................................
|
||||
...........................................................#.................#........#.....................................................
|
||||
#...............................#..........#.............................................................................#..................
|
||||
.......#.................#............................................#.........................#...........#.......................#.......
|
||||
............................................................................................................................................
|
||||
.............#...................................#..........................................................................................
|
||||
................................................................................#...........................................................
|
||||
.#...............#.............#..............................................................#...................................#.......#.
|
||||
.......................................................................................#..............................#.....................
|
||||
......................................#................................................................#.....#........................#.....
|
||||
...........................#..........................#.....................................................................................
|
||||
........#...................................#.............................................................................#.................
|
||||
..............#............................................#....................................#...........................................
|
||||
......................#...................................................................#.................................................
|
||||
..................................#..................................#......#...............................................................
|
||||
.............................................................................................................................#..............
|
||||
.#...............................................#....................................................#............#................#.......
|
||||
............#..........................#.........................#..........................................................................
|
||||
........................#....................#.............................................................................................#
|
||||
........................................................................................#.................#..............#..................
|
||||
............................................................................................................................................
|
||||
..............................................................#.......#..............................................#......................
|
||||
........#.....................#.....#.............................................................#....................................#....
|
||||
......................#...................................#.......#.........................................................................
|
||||
..#.............#...........................#.....................................#...........................#.............#...............
|
||||
10
day11/sample.txt
Normal file
10
day11/sample.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
||||
Reference in New Issue
Block a user