aocc22

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

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 }