uppgb.c (1085B)
1 #include "common.h" 2 3 uint64_t sscore(uint8_t **g, int i, int j, size_t nlines, size_t w) { 4 uint64_t u = 0, d = 0, r = 0, l = 0; 5 6 int k; 7 uint8_t m = g[i][j]; 8 for (k = i - 1; k >= 0; k--) { 9 u++; 10 if (g[k][j] >= m) 11 break; 12 } 13 14 m = g[i][j]; 15 for (k = i + 1; k < nlines; k++) { 16 d++; 17 if (g[k][j] >= m) 18 break; 19 } 20 21 m = g[i][j]; 22 for (k = j + 1; k < w; k++) { 23 r++; 24 if (g[i][k] >= m) 25 break; 26 } 27 28 m = g[i][j]; 29 for (k = j - 1; k >= 0; k--) { 30 l++; 31 if (g[i][k] >= m) 32 break; 33 } 34 35 return u * d * r * l; 36 } 37 38 int main(int argc, char **argv) { 39 char **lines; 40 size_t nlines = readlines(&lines, "input"); 41 42 size_t w; 43 uint8_t **g = grid(lines, nlines, &w); 44 45 uint64_t f[nlines][w]; 46 47 int i, j; 48 for (i = 0; i < nlines; i++) 49 for (j = 0; j < w; j++) 50 f[i][j] = 0; 51 52 for (i = 0; i < nlines; i++) 53 for (j = 0; j < w; j++) 54 f[i][j] = sscore(g, i, j, nlines, w); 55 56 uint64_t m = 0; 57 for (i = 0; i < nlines; i++) 58 for (j = 0; j < w; j++) 59 if (f[i][j] > m) 60 m = f[i][j]; 61 62 printf("%llu\n", m); 63 }