Index: aoc2024.c ================================================================== --- aoc2024.c +++ aoc2024.c @@ -4,10 +4,46 @@ #include #include #include #include "aocdailies.h" #include "aocutils.h" + +/* === aoc202407 ======================================================= + Part one looks easy +===================================================================== */ + +static bool canbetrue(unsigned v, unsigned *a, size_t n) { + // for startes let's assume no overflowing + if (n == 1) return (v == *a); + unsigned tmp = a[1]; + a[1] = a[0] + tmp; + if (canbetrue(v, a+1, n-1)) return true; + a[1] = a[0] * tmp; + if (canbetrue(v, a+1, n-1)) return true; + a[1] = tmp; + return false; +} + +void aoc202407(char *data, size_t len) { + (void)len; // unused argument + unsigned calibrationtotal = 0; + char *line = strtok(data, "\n"); + unsigned number[50], nnumber, maxn = 0; + while (line) { + char *err; + unsigned testvalue = strtoul(line, &err, 10); + err += 1; // skip ':' + nnumber = 0; + while (*err == ' ') { + number[nnumber++] = strtoul(err, &err, 10); + } + if (canbetrue(testvalue, number, nnumber)) calibrationtotal += testvalue; + if (nnumber > maxn) { maxn = nnumber; printf("max: %u\n", maxn); } + line = strtok(NULL, "\n"); + } + printf("The calibration total is {%u}.\n", calibrationtotal); +} /* === aoc202406 ======================================================= Hmmm, I've done something like this already this year... on day 4 I need rcmap() moved to aocutils ... done; now it's called `linearize2d` Part Two: brute force? It likely is faster than coming up with an algo Index: aocdailies.c ================================================================== --- aocdailies.c +++ aocdailies.c @@ -4,10 +4,12 @@ aocfunc *aocselect(unsigned y, unsigned d) { aocfunc *p; switch (y * 100 + d) { default: p = NULL; break; + // YYYYdd ==> aocYYYYdd + case 202407: p = aoc202407; break; case 202406: p = aoc202406; break; case 202405: p = aoc202405; break; case 202404: p = aoc202404; break; case 202403: p = aoc202403; break; case 202402: p = aoc202402; break; Index: aocdailies.h ================================================================== --- aocdailies.h +++ aocdailies.h @@ -4,10 +4,11 @@ #include typedef void aocfunc(char *, size_t); aocfunc *aocselect(unsigned, unsigned); +aocfunc aoc202407; aocfunc aoc202406; aocfunc aoc202405; aocfunc aoc202404; aocfunc aoc202403; aocfunc aoc202402;