Index: aoc2024.c ================================================================== --- aoc2024.c +++ aoc2024.c @@ -26,22 +26,26 @@ if (n == 1) { if (v == *a) return minop; return 0; } unsigned long long tmp = a[1]; - a[1] = a[0] + tmp; - int p = operatorsrequired(v, a+1, n-1, (minop > 2)?3:2); - a[1] = tmp; - if (p) return p; - a[1] = a[0] * tmp; - p = operatorsrequired(v, a+1, n-1, (minop > 2)?3:2); - a[1] = tmp; - if (p) return p; - a[1] = concat(a[0], tmp); - p = operatorsrequired(v, a+1, n-1, 3); - a[1] = tmp; - return p; + int pplus, pmult, pconcat = 0; + a[1] = a[0] + tmp; + pplus = operatorsrequired(v, a+1, n-1, 2); + a[1] = tmp; + a[1] = a[0] * tmp; + pmult = operatorsrequired(v, a+1, n-1, 2); + a[1] = tmp; + if (!pplus && !pmult) { + a[1] = concat(a[0], tmp); + pconcat = operatorsrequired(v, a+1, n-1, 3); + a[1] = tmp; + } + if (pconcat) return 3; + if (pmult) return 2; + if (pplus) return 2; + return 0; } void aoc202407(char *data, size_t len) { (void)len; // unused argument unsigned long long calibrationtotal = 0, calibration3total = 0;