Skip to content

Instantly share code, notes, and snippets.

@sheniff
Created May 3, 2015 06:04
Show Gist options
  • Select an option

  • Save sheniff/9dff74c956f19a71711a to your computer and use it in GitHub Desktop.

Select an option

Save sheniff/9dff74c956f19a71711a to your computer and use it in GitHub Desktop.
Spoiler Alert: Project Euler 4
var getPalindrome = function(num) {
var str = num.toString().split(''),
len = str.length,
half = len / 2;
for(var i = 0; i < half; i++) {
str[len - 1 - i] = str[i];
}
return parseInt(str.join(''), 10);
}
var findLargestPalindrome = function(numDigs) {
var dig1 = Math.pow(10, numDigs) - 1,
minDig = Math.floor(dig1/10),
largestProduct = Math.pow(dig1, 2), // Find largest product of 2 3-digits number
largestPalindrome = getPalindrome(largestProduct),
len = largestPalindrome.toString().length / 2;
while(largestPalindrome > 0) {
// console.log(largestPalindrome);
for(var i = dig1; i > minDig; i--) {
var division,
validPalindrome = !(largestPalindrome % i)
&& (division = largestPalindrome / i) > minDig
&& division <= dig1;
// console.log(i, division, validPalindrome);
if(validPalindrome) {
console.log(i, division, largestPalindrome);
return largestPalindrome;
}
}
// this was not a valid palindrome (not divisible by 2 n-digits digits)
// find the next one
len = largestPalindrome.toString().length / 2;
largestPalindrome -= Math.pow(10, len);
// and find the new palindrome
largestPalindrome = getPalindrome(largestPalindrome);
}
return false;
}
console.log(findLargestPalindrome(3));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment