Index: aoc2025.c ================================================================== --- aoc2025.c +++ aoc2025.c @@ -19,17 +19,25 @@ /* === aoc202505 ======================================================= ===================================================================== */ struct Range { long long unsigned lo, hi; }; + +int ascending(const void *a, const void *b) { + const struct Range *aa = a, *bb = b; + if (aa->lo < bb->lo) return -1; + if (aa->lo > bb->lo) return 1; + return 0; +} void aoc202505(char *data, size_t len) { (void)len; // unused argument struct Range r[200] = {0}; size_t nr = 0; char *err; for (;;) { + // read ranges char *minus = strchr(data, '-'); if (!minus) break; *minus = 0; r[nr].lo = strtoull(data, &err, 10); *minus++ = '-'; @@ -39,13 +47,13 @@ *enter++ = '\n'; data = enter; } unsigned fresh = 0; for (;;) { + // read and process single entries long long unsigned item = strtoull(data, &err, 10); if (err[0] != '\n') break; - if (item == 0) break; data = err + 1; for (size_t k = 0; k < nr; k++) { if ((r[k].lo <= item) && (item <= r[k].hi)) { fresh++; break; @@ -52,11 +60,25 @@ } } } printf("There are %u fresh items.\n", fresh); - // pause for brain storming pause + qsort(r, nr, sizeof *r, ascending); + #if 0 + for (;;) { + int mergecount = 0; + for (size_t k = 1; k < nr, k++) { + for (size_t kk = 0; kk < k; kk++) { + mergecount += merge(r, kk, k) { + mergecount++; + nr--; + } + } + } + if (mergecount == 0) break; + } + #endif } /* === aoc202504 ======================================================= ===================================================================== */ static unsigned evolve(struct RectangularMap *rm, unsigned src) {