function solveDigits(
numbers,
target,
operations = []
) {
if (numbers.includes(target)) return true;
const pairs = fisherYatesShuffle(getPermutationPairs(numbers));
const mathOperations = fisherYatesShuffle(mathFunctions)
for (let i = 0; i < pairs.length; i++) {
const pair = pairs[i];
for (let j = 0; j < mathOperations.length; j++) {
const f = mathOperations[j];
const result = applyOperation(pair, f.func);
if (result) {
const newNumberArray = removeFirstInstances(numbers, pair);
newNumberArray.push(result);
const solution = solveDigits(newNumberArray, target, operations);
if (solution) {
operations.push([f.name, pair, result, newNumberArray.sort((a,b) => a-b)]);
return operations
}
}
}
}
return undefined
}