Journal Archive
2022
function solution43() {
// find all permutations of 1023456789
const findPermutations = (numStr) => {
let digits = numStr.split(""); // convert number string to array
let listOfPermutations = []; // will store list of permutated numbers
// recursive function to permute the number
function permute(digitsArr, memo = []) {
// base case, stop the call if no more digits in the digits arr
if (digitsArr.length === 0) {
listOfPermutations.push(memo.join("")); // add the permutated number into the list
} else {
for (let i = 0; i < digitsArr.length; i++) {
let copyDigitsArr = [...digitsArr];
// set current digit and remove from copyDigits array
let currentDigit = copyDigitsArr.splice(i, 1);
permute([...copyDigitsArr], memo.concat(currentDigit));
}
}
}
permute(digits); // start the recursive function
return listOfPermutations;
}
const isDivisible = (numStr) => {
return ( Number(numStr.slice(7,10)) % 17 === 0 &&
Number(numStr.slice(2,5)) % 3 === 0 &&
Number(numStr.slice(3,6)) % 5 === 0 &&
Number(numStr.slice(4,7)) % 7 === 0 &&
Number(numStr.slice(5,8)) % 11 === 0 &&
Number(numStr.slice(6,9)) % 13 === 0 &&
Number(numStr.slice(1,4)) % 2 === 0 );
}
const allPandigitals = findPermutations("1234567890")
.filter( numstr => isDivisible(numstr));
return allPandigitals.reduce( (prev, next) => Number(prev) + Number(next), 0);
}
Day 4: Solving one of Project Euler's problems
Sub-string divisibility
The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property.
Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note the following:
- d2d3d4=406 is divisible by 2
- d3d4d5=063 is divisible by 3
- d4d5d6=635 is divisible by 5
- d5d6d7=357 is divisible by 7
- d6d7d8=572 is divisible by 11
- d7d8d9=728 is divisible by 13
- d8d9d10=289 is divisible by 17
Find the sum of all 0 to 9 pandigital numbers with this property.