Problem 4
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 99.
Find the largest palindrome made from the product of two 3-digit numbers.
Solution
#!/usr/bin/env python
def ispal(num): #Check if the number is a palindrome
val = str(num) #Python just does the right thing here. Nice.
for each in range(0,int((len(val)+1)/2)): #Any mismatch return false
if val[len(val)-1-each]!=val[0+each]: return False
return True #otherwise return true
def calc(): #brute force looking for palindromes
temp = 0
largest = 0
for each in range(999,100,-1):
for other in range(999,100,-1):
temp = each * other
if ispal(temp):
largest = max(largest,temp)
return largest
if __name__ == '__main__' :
print (calc())
The answer is 906609.
Approach
This was one of the problems which took almost no time to code. The seamless casting in Python made this one trivial. You just work from both ends and look for mismatches.Converting to a string worked exactly like it should have and python made it trivial to code. Using some sort of built-in to reverse the string and see if it matches the original sting would probably be faster than a char by char comparison.
Benchmarks
The benchmarks fell out pretty much like the others. Boring example, Sorry!Problem #4 Benchmarks
time python palindromes.py
906609
real 0m0.746s
user 0m0.744s
sys 0m0.000s
time python -O palindromes.py
906609
real 0m0.764s
user 0m0.756s
sys 0m0.004s
time python3 palindromes.py
906609
real 0m0.839s
user 0m0.828s
sys 0m0.008s
time python3 -O palindromes.py
906609
real 0m0.875s
user 0m0.868s
sys 0m0.004s
time pypy palindromes.py
906609
real 0m0.090s
user 0m0.080s
sys 0m0.008s
time pypy -O palindromes.py
906609
real 0m0.087s
user 0m0.072s
sys 0m0.012s
time jython palindromes.py
906609
real 0m2.835s
user 0m5.852s
sys 0m0.176s