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