Index: aoc2024.c ================================================================== --- aoc2024.c +++ aoc2024.c @@ -6,10 +6,14 @@ #include #include "aocdailies.h" #include "aocutils.h" static void reorder(unsigned *a, size_t na, unsigned (*r)[2], size_t nr) { + (void)a; + (void)na; + (void)r; + (void)nr; } static const unsigned *vfind(unsigned v, const unsigned *a, size_t n) { for (size_t k = 0; k < n; k++) { if (a[k] == v) return a + k; @@ -18,31 +22,39 @@ } void aoc202405(char *data, size_t len) { (void)len; // unused argument unsigned pagepair[1200][2], npp = 0; // 1200 works for me + unsigned ppcount[100][2] = {0}; // assume all page numbers < 100 char *line = strtok(data, "\n"); while (strchr(line, '|')) { char *err; pagepair[npp][0] = strtoul(line, &err, 10); + ppcount[pagepair[npp][0]][0]++; err += 1; // skip '|' pagepair[npp][1] = strtoul(err, &err, 10); + ppcount[pagepair[npp][1]][1]++; npp++; line = strtok(NULL, "\n"); } + for (unsigned k = 0; k < 100; k++) { + if (ppcount[k][0] + ppcount[k][1]) + printf("%u: [%u, %u] ", k, ppcount[k][0], ppcount[k][1]); + } + printf("\n"); unsigned update[32], nupdates; // 32 works for me - unsigned accumsum = 0; + unsigned accumsum = 0, accumsum2 = 0; do { nupdates = 0; char *err = line; for (;;) { update[nupdates++] = strtoul(err, &err, 10); if (*err == ',') err++; else break; } if (nupdates % 2 == 0) printf("even number of updates found!\n"); - unsigned accum = update[nupdates / 2], accumsum2 = 0; + unsigned accum = update[nupdates / 2]; for (size_t k = 0; k < npp; k++) { const unsigned *before = vfind(pagepair[k][0], update, nupdates); if (!before) continue; const unsigned *after = vfind(pagepair[k][1], update, nupdates); if (!after) continue;