C 2024 day 18 part 1
This commit is contained in:
parent
9c3144c0e7
commit
1449f587a4
99
c/2024/18/ram_run.c
Normal file
99
c/2024/18/ram_run.c
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include "../../lib/aoc.h"
|
||||||
|
|
||||||
|
#define DIMENSION 71
|
||||||
|
#define QUEUE_LENGTH 200
|
||||||
|
|
||||||
|
typedef struct Node {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
char c;
|
||||||
|
int cost;
|
||||||
|
} Node;
|
||||||
|
|
||||||
|
typedef struct Grid {
|
||||||
|
Node grid[DIMENSION][DIMENSION];
|
||||||
|
} Grid;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char *line;
|
||||||
|
Grid g;
|
||||||
|
|
||||||
|
for (int i = 0; i < DIMENSION; i++) {
|
||||||
|
for (int j = 0; j < DIMENSION; j++) {
|
||||||
|
g.grid[i][j].x = i;
|
||||||
|
g.grid[i][j].y = j;
|
||||||
|
g.grid[i][j].c = '.';
|
||||||
|
g.grid[i][j].cost = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int x, y;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
while ((line = aoc_read_line()) != NULL) {
|
||||||
|
sscanf(line, "%d,%d", &x, &y);
|
||||||
|
if (i++ < 1024) g.grid[x][y].c = '#';
|
||||||
|
}
|
||||||
|
|
||||||
|
Node* queue[QUEUE_LENGTH];
|
||||||
|
queue[0] = &(g.grid[0][0]);
|
||||||
|
int queue_start = 0;
|
||||||
|
int queue_end = 1;
|
||||||
|
|
||||||
|
g.grid[0][0].c = '*';
|
||||||
|
g.grid[0][0].cost = 0;
|
||||||
|
|
||||||
|
while (queue_start != queue_end) {
|
||||||
|
// get first element of queue
|
||||||
|
Node* n = queue[queue_start++];
|
||||||
|
queue_start %= QUEUE_LENGTH;
|
||||||
|
n->c = ' ';
|
||||||
|
// add its neighbors to the queue
|
||||||
|
if (n->x - 1 >= 0 && g.grid[n->x - 1][n->y].c == '.') {
|
||||||
|
g.grid[n->x - 1][n->y].c = '*';
|
||||||
|
g.grid[n->x - 1][n->y].cost = n->cost + 1;
|
||||||
|
queue[queue_end++] = &(g.grid[n->x - 1][n->y]);
|
||||||
|
queue_end %= 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (n->y - 1 >= 0 && g.grid[n->x][n->y - 1].c == '.') {
|
||||||
|
g.grid[n->x][n->y - 1].c = '*';
|
||||||
|
g.grid[n->x][n->y - 1].cost = n->cost + 1;
|
||||||
|
queue[queue_end++] = &(g.grid[n->x][n->y - 1]);
|
||||||
|
queue_end %= 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (n->x + 1 < DIMENSION && g.grid[n->x + 1][n->y].c == '.') {
|
||||||
|
g.grid[n->x + 1][n->y].c = '*';
|
||||||
|
g.grid[n->x + 1][n->y].cost = n->cost + 1;
|
||||||
|
queue[queue_end++] = &(g.grid[n->x + 1][n->y]);
|
||||||
|
queue_end %= 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (n->y + 1 < DIMENSION && g.grid[n->x][n->y + 1].c == '.') {
|
||||||
|
g.grid[n->x][n->y + 1].c = '*';
|
||||||
|
g.grid[n->x][n->y + 1].cost = n->cost + 1;
|
||||||
|
queue[queue_end++] = &(g.grid[n->x][n->y + 1]);
|
||||||
|
queue_end %= 200;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
for (int i = 0; i < DIMENSION; i++) {
|
||||||
|
for (int j = 0; j < DIMENSION; j++) {
|
||||||
|
printf("%c", g.grid[j][i].c);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
printf("Part 1: %d", g.grid[DIMENSION - 1][DIMENSION - 1].cost);
|
||||||
|
|
||||||
|
aoc_free();
|
||||||
|
exit(0);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user