#include #include #include #include #include "common.h" int MAP_WIDTH = 0; int MAP_HEIGHT = 0; int MAP[MAP_MAX_Y][MAP_MAX_X]; void read_file(char* path) { FILE* fp = fopen(path, "r"); if (fp == NULL) exit(EXIT_FAILURE); int y = 0; int x = 0; while (true) { char chr = fgetc(fp); if (chr == EOF) break; if (chr == '\n') { y++; if (MAP_WIDTH == 0) MAP_WIDTH = x; x = 0; continue; } MAP[y][x] = chr - 48; assert(MAP[x][y] < 10 && MAP[x][y] >= 0); x++; } MAP_HEIGHT = y; fclose(fp); } void print_map(int map[100][100]) { for (int y = 0; y < MAP_HEIGHT; y++) { printf("%d: ", y); for (int x = 0; x < MAP_WIDTH; x++) { printf("%d ", map[y][x]); } printf("\n"); } } int with_low_point(result_fn fn) { int result = 0; for (int y = 0; y < MAP_HEIGHT; y++) { for (int x = 0; x < MAP_WIDTH; x++) { int cur = MAP[y][x]; bool is_low_point = true; if (y > 0) { is_low_point = is_low_point && MAP[y - 1][x] > cur; } if (y < MAP_HEIGHT - 1) { is_low_point = is_low_point && MAP[y + 1][x] > cur; } if (x > 0) { is_low_point = is_low_point && MAP[y][x - 1] > cur; } if (x < MAP_WIDTH - 1) { is_low_point = is_low_point && MAP[y][x + 1] > cur; } if (is_low_point) { result += fn(x, y, cur); } } } return result; }