function eraseFromArray(arrayToBeErasedFrom, arrayToErase) {
return arrayToBeErasedFrom.filter(x => !(arrayToErase.includes(x)))
}
function arrayToNumber(inputArr) {
return inputArr.reduce((a, b, index) => a + b * 10 ** (inputArr.length - index - 1), 0);
}
function generateCountingArray(num) {
let resultArr = [];
for (let o = 1; o <= 10; o++) {
resultArr.push(o);
}
return resultArr;
}
function checkFunction(arrayToCheck, indicesToSum, num) {
const testArray = indicesToSum.map(x => arrayToCheck[x-1])
return arrayToNumber(testArray) % num === 0
}
function isApplicable(arrayToCheck) {
const checkArr = [
[[2,3,4] , 2],
[[3,4,5] , 3],
[[4,5,6] , 5],
[[5,6,7] , 7],
[[6,7,8] ,11],
[[7,8,9] ,13],
[[8,9,10] ,17]
]
for (let inp of checkArr) {
if (!checkFunction(arrayToCheck,...inp) && arrayToCheck.length === inp[0][2]) {
return false;
}
}
return true;
}
function findApplicablePandigital(inputArr, arr) {
const remArr = eraseFromArray(arr, inputArr );
if (!isApplicable(inputArr)) {
return []}
let resultArr = inputArr.length === 10 ? [inputArr] : [];
for (let item of remArr) {
resultArr = [...resultArr, ...findApplicablePandigital([...inputArr, item], arr)]
}
return resultArr;
}
const resultat = findApplicablePandigital([],[0,1,2,3,4,5,6,7,8,9]).map(arrayToNumber)
console.log(resultat.reduce((a,b) => a + b, 0))