aoc2024/10/part1.c
2024-12-10 11:13:12 +01:00

40 lines
1.1 KiB
C

#include "_.h"
int find_way(char **inputs, int y, int x, char before) {
if (inputs[y][x] == '9') {
inputs[y][x] = 'X';
return 1;
}
int count = 0;
if (inputs[y + 1] != NULL && inputs[y + 1][x] == before + 1)
count += find_way(inputs, y + 1, x, before + 1);
if (y > 0 && inputs[y - 1][x] == before + 1)
count += find_way(inputs, y - 1, x, before + 1);
if (x < (int)strlen(inputs[y]) && inputs[y][x + 1] == before + 1)
count += find_way(inputs, y, x + 1, before + 1);
if (x > 0 && inputs[y][x - 1] == before + 1)
count += find_way(inputs, y, x - 1, before + 1);
return count;
}
int main(int argc, char **argv) {
if (argc != 2)
return 1;
char *input = argv[1];
char **inputs = str_split(strdup(input), '\n');
int count = 0;
for (int i = 0; inputs[i] != NULL; i++) {
for (int j = 0; inputs[i][j] != '\0'; j++) {
if (inputs[i][j] == '0')
count += find_way(strsdup(inputs), i, j, '0');
}
}
printf("count: %d\n", count);
return 0;
}