summaryrefslogtreecommitdiff
path: root/2024/10/1.c
diff options
context:
space:
mode:
Diffstat (limited to '2024/10/1.c')
-rw-r--r--2024/10/1.c75
1 files changed, 3 insertions, 72 deletions
diff --git a/2024/10/1.c b/2024/10/1.c
index a8112a6..e1aee04 100644
--- a/2024/10/1.c
+++ b/2024/10/1.c
@@ -1,78 +1,14 @@
#include <stdio.h>
#include <stdbool.h>
-#include "../../d.h"
+#include "d.h"
#include "map.h"
+#include "graph.h"
bool debug = true;
-typedef struct {
- int width;
- int height;
- char** e;
- bool** visited;
-} Graph2D;
-enum {
- NORTH = 0, EAST, SOUTH, WEST, DIRECTIONS,
-};
-
-/* Reads from the input until exhausted. Returns memory which must be
-freed by the caller. */
-Graph2D*
-ingest(FILE* in)
-{
- char *t = getall(in);
- char *s = t;
-
- /* Two passes. One to count width and height.
- Another to store to allocated memory. */
- int height = 0, width = -1, i = 0;
- while (s[i] != '\0') {
- if (s[i] == '\n') {
- if (width == -1) {
- width = i + 1;
- }
- height++;
- }
- i++;
- }
- char** buffer = calloc(height, sizeof(char*));
- bool** visited = calloc(height, sizeof(bool*));
-
- Graph2D* g = calloc(1, sizeof(Graph2D));
- g->width = width;
- g->height = height;
- g->e = buffer;
- g->visited = visited;
-
- i = height;
- while (i > 0) {
- buffer[i-1] = calloc(width, sizeof(char));
- visited[i-1] = calloc(width, sizeof(bool));
- i--;
- }
-
- i = 0;
- int j = 0;
- while (i < height) {
- if (j < width - 1) {
- buffer[i][j] = *s;
- j++;
- } else {
- i++;
- j = 0;
- }
- s++;
- }
- free(t);
- return g;
-}
-typedef struct {
- int x;
- int y;
-} Coordinates;
typedef struct Stack {
void* value;
@@ -94,12 +30,6 @@ push(Stack* s, void* value) {
return t;
}
-bool
-valid(Graph2D* g, Coordinates c)
-{
- return c.x >= 0 && c.x < g->width && c.y >= 0 && c.y < g->height;
-}
-
int score = 0;
void
travel(Graph2D* g, Coordinates c)
@@ -152,6 +82,7 @@ main()
Graph2D* g = ingest(in);
+ hashmap* map = hashmap_create();
for (int i = 0; i < g->height; i++) {
for (int j = 0; j < g->width; j++) {
if (g->e[i][j] == '0') {