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