--- id: 5900f3951000cf542c50fea8 title: 'Problem 41: Pandigital prime' challengeType: 5 forumTopicId: 302078 dashedName: problem-41-pandigital-prime --- # --description-- We shall say that an `n`-digit number is pandigital if it makes use of all the digits 1 to `n` exactly once. For example, 2143 is a 4-digit pandigital and is also prime. What is the largest `n`-length digit pandigital prime that exists? # --hints-- `pandigitalPrime(4)` should return a number. ```js assert(typeof pandigitalPrime(4) === 'number'); ``` `pandigitalPrime(4)` should return 4231. ```js assert(pandigitalPrime(4) == 4231); ``` `pandigitalPrime(7)` should return 7652413. ```js assert(pandigitalPrime(7) == 7652413); ``` # --seed-- ## --seed-contents-- ```js function pandigitalPrime(n) { return n; } pandigitalPrime(7); ``` # --solutions-- ```js function pandigitalPrime(n) { function isPrime(num) { for (let i = 2, s = Math.sqrt(num); i <= s; i++) { if (num % i === 0) { return false; } } return num !== 1; } function getPermutations(n) { if (n === 1) { permutations.push(digitsArr.join('')); } else { for (let i = 0; i < n - 1; i++) { getPermutations(n - 1); // swap(n % 2 === 0 ? i : 0, n - 1); if (n % 2 === 0) { swap(i, n - 1); } else { swap(0, n - 1); } } getPermutations(n - 1); } } function swap(x, y) { let temp = digitsArr[x]; digitsArr[x] = digitsArr[y]; digitsArr[y] = temp; } let max = 0; let permutations = []; let digitsArr; let pandigitalNum = ''; for (let max = n; max > 0; max--) { pandigitalNum += max; } for (let i = 0; i < pandigitalNum.length; i++) { if (max > 0) { break; } else { permutations = []; const currMax = pandigitalNum.slice(i); digitsArr = currMax.split(''); getPermutations(digitsArr.length); // sort permutations in descending order permutations.sort(function(a, b) { return b - a; }); for (let perm of permutations) { const thisPerm = parseInt(perm); if (isPrime(thisPerm)) { max = thisPerm; break; } } } } return max; } ```