Print variations DP

Run Settings
LanguageJavaScript
Language Version
Run Command
const NUMS = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const SUM = 100; function printVariation(operators, numbers) { const sequence = [numbers[0]]; operators.forEach((o, index) => { sequence.push(o); sequence.push(numbers[index + 1]); }); console.log(sequence.join(' ')); } function joinNumbers(operators, numbers, currentSum, iteration) { const joinedNumbers = numbers.slice(); const prevNum = joinedNumbers[joinedNumbers.length - 1]; const joinedNum = prevNum * 10 + NUMS[iteration]; let updatedSum = currentSum; joinedNumbers[joinedNumbers.length - 1] = joinedNum; if(operators.length) { prevOperation = operators[operators.length - 1]; if (prevOperation === '+') { updatedSum -= prevNum; updatedSum += joinedNum; } else { updatedSum += prevNum; updatedSum -= joinedNum; } } else { updatedSum = joinedNum; } return { joinedNumbers, updatedSum } } function findVariations(operators = [], numbers = [NUMS[0]], currentSum = NUMS[0] , iteration = 1) { if (iteration > 8) { if (currentSum === SUM) { printVariation(operators, numbers); } return; } const nextNumbers = numbers.slice(); nextNumbers.push(NUMS[iteration]); // Next number for '+' and '-' const v1 = operators.slice(); v1.push('+'); findVariations(v1, nextNumbers, currentSum + NUMS[iteration], iteration + 1); const v2 = operators.slice(); v2.push('-') findVariations(v2, nextNumbers, currentSum - NUMS[iteration], iteration + 1); // Join two numbers const { joinedNumbers, updatedSum } = joinNumbers(operators, numbers, currentSum, iteration); findVariations(operators, joinedNumbers, updatedSum, iteration + 1); } findVariations();
Editor Settings
Theme
Key bindings
Full width
Lines