Journal Archive

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.