aocc22

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

uppgb.c (848B)


      1 #include "common.h"
      2 
      3 static inline int _rcmpu64(uint64_t n, uint64_t m) {
      4   if (n < m) {
      5     return -1;
      6   } else if (n == m) {
      7     return 0;
      8   }
      9 
     10   return 1;
     11 }
     12 
     13 static int cmpu64(const void *p1, const void *p2) {
     14   return _rcmpu64(*(uint64_t *)p1, *(uint64_t *)p2);
     15 }
     16 
     17 void sort(uint64_t *sums, size_t nelves) {
     18   qsort(sums, nelves, sizeof(*sums), cmpu64);
     19 }
     20 
     21 int main(int argc, char **argv) {
     22   char **lines;
     23   size_t nlines = readlines(&lines, "input.txt");
     24   printf("#lines: %zu\n", nlines);
     25   size_t nelves = count_elves(lines, nlines);
     26   printf("#elves: %zu\n", nelves);
     27 
     28   stack_u64 estack[nelves];
     29   get_estack(estack, nelves, lines, nlines);
     30   uint64_t sums[nelves];
     31   comp_sums(sums, estack, nelves);
     32 
     33   sort(sums, nelves);
     34   uint64_t *top = &sums[nelves - 3];
     35   uint64_t tsum = top[0] + top[1] + top[2];
     36   printf("sum: %llu\n", tsum);
     37 }