aocc22

Advent of Code 2022
git clone git://www.tkruger.se/aocc22.git
Log | Files | Refs | README

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 }