Last active
December 26, 2015 03:59
-
-
Save julius-datajunkie/7089529 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest | |
def LargestIntDividesEleven(numberOfDigits): | |
largestInt = 10**(numberOfDigits)-1 | |
return largestInt - (largestInt % 11) | |
def reverse(number): | |
''' | |
This method does not speed things up, but it does provide a rather | |
interesting way of reversing any integers without converting it to | |
string first | |
''' | |
reversed = 0 | |
while number > 0: | |
reversed = 10*reversed + number % 10 | |
number = number/10 | |
return reversed | |
def IsPalindrome(number): | |
if (reverse(number) == number): | |
return True | |
else: | |
return False | |
def FindLargestPalindromeProduct(numberOfDigits): | |
''' | |
Extremely Smart way of getting the solution!Kudo to those who come up with this | |
Start by assuming P = the largest palindrome and observe its properties. | |
''' | |
startInt = 10**(numberOfDigits-1) | |
endInt = 10**(numberOfDigits)-1 | |
max = 0 | |
i = endInt | |
while ( i >= startInt): | |
decrement = 1 | |
if (i % 11 == 0): | |
j = i | |
else: | |
j = LargestIntDividesEleven(numberOfDigits) | |
decrement = 11 | |
while ( j >= startInt): | |
number = i*j | |
if IsPalindrome(number): | |
if (max < number): | |
max = number | |
else: | |
break | |
j -= decrement | |
i -= 1 | |
return max | |
if __name__ == '__main__': | |
unittest.main(exit=False) | |
print(FindLargestPalindromeProduct(3)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment