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 }