Index: aoc2024.c ================================================================== --- aoc2024.c +++ aoc2024.c @@ -13,14 +13,16 @@ char *dontleft = data; char *dontrite = strstr(dontleft + 1, "don't()"); for (;;) { char *mul = strstr(rest, "mul("); if (mul) { + // make sure `doleft` and `dorite` are to the left and right of `mul` while (dorite && (mul > dorite)) { doleft = dorite; dorite = strstr(dorite + 1, "do()"); } + // also for `dontleft` and `dontrite` while (dontrite && (mul > dontrite)) { dontleft = dontrite; dontrite = strstr(dontrite + 1, "don't()"); } rest = mul + 4; @@ -31,10 +33,11 @@ if (isdigit((unsigned char)err[1])) { rest = err + 1; term[1] = (int)strtol(rest, &err, 10); if (*err == ')') { sumproducts += term[0] * term[1]; + // multiply by 0 if closest conditional to the left is "don't()" sumproducts2 += (doleft >= dontleft) * (term[0] * term[1]); rest = err + 1; } } }