uppga.c (1333B)
1 #include "common.h" 2 3 int main(int argc, char **argv) { 4 char **lines; 5 size_t nlines = readlines(&lines, "input"); 6 7 size_t w; 8 int i, j; 9 uint8_t **g = grid(lines, nlines, &w); 10 11 uint8_t f[nlines][w]; 12 bzero(f, nlines * w); 13 14 // left 15 size_t m; 16 for (i = 0; i < nlines; i++) { 17 f[i][0] = 1; 18 m = g[i][0]; 19 for (j = 1; j < w; j++) { 20 if (g[i][j] > m) { 21 m = g[i][j]; 22 f[i][j] = 1; 23 } 24 if (m == 9) 25 break; 26 } 27 } 28 29 // right 30 for (i = 0; i < nlines; i++) { 31 f[i][w - 1] = 1; 32 m = g[i][w - 1]; 33 for (j = w - 2; j > 0; j--) { 34 if (g[i][j] > m) { 35 m = g[i][j]; 36 f[i][j] = 1; 37 } 38 if (m == 9) 39 break; 40 } 41 } 42 43 // top 44 for (i = 0; i < w; i++) { 45 f[0][i] = 1; 46 m = g[0][i]; 47 for (j = 1; j < nlines; j++) { 48 if (g[j][i] > m) { 49 m = g[j][i]; 50 f[j][i] = 1; 51 } 52 if (m == 9) 53 break; 54 } 55 } 56 57 // bottom 58 for (i = 0; i < w; i++) { 59 f[nlines - 1][i] = 1; 60 m = g[nlines - 1][i]; 61 for (j = nlines - 2; j > 0; j--) { 62 if (g[j][i] > m) { 63 m = g[j][i]; 64 f[j][i] = 1; 65 } 66 if (m == 9) 67 break; 68 } 69 } 70 71 uint64_t c = 0; 72 for (i = 0; i < nlines; i++) { 73 for (j = 0; j < w; j++) { 74 if (f[i][j]) 75 c++; 76 } 77 } 78 printf("%llu\n", c); 79 }