const fs = require('fs'); const input = fs.readFileSync(__dirname + '/input.txt', 'utf8'); const equations: Array = input.split("\n"); let sum = 0; const operators = [(a: number, b: number) => a * b, (a: number, b: number) => a + b, /** Part 2 */ (a: number, b: number) => parseInt(''+a+b)]; function recurseSum(carry: number, remaining: Array, target: number, sum: string = ''): boolean { if (!remaining.length) { return target === carry; } const nextNum = remaining[0]; for (let o of operators) { const newResult = recurseSum(o(carry, nextNum), remaining.slice(1), target); if (newResult) { return newResult; } }; return false; } equations.forEach((eq) => { const [testStr, numStr] = eq.split(':'); const test = parseInt(testStr); const nums = numStr.trim().split(' ').map((n) => parseInt(n)); if (recurseSum(nums[0], nums.slice(1), test)) { sum += test; } }); console.log(sum);