102 lines
2.2 KiB
Python
Executable File
102 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python
|
||
|
||
# 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.
|
||
#
|
||
|
||
import decorators
|
||
import time
|
||
|
||
def is_palindrome(candidate):
|
||
"""
|
||
Returns a boolean to confirm if the passed
|
||
integer is a palindrome.
|
||
|
||
is_palindrome(candidate)
|
||
|
||
param 'candidate': Integer to test for palindrom-iness.
|
||
|
||
"""
|
||
|
||
# Convert maximum candidate to a list ...
|
||
listed_candidate = [int(i) for i in str(candidate)]
|
||
flipped_candidate = [int(i) for i in str(candidate)]
|
||
|
||
# Determine length of maximum candidate, and manipulate.
|
||
num_digits = listed_candidate.__len__()
|
||
digit_flips = int(num_digits/2)
|
||
|
||
for i in range(1,digit_flips):
|
||
flipped_candidate[-i-1] = flipped_candidate[i]
|
||
flipped_candidate[-1] = flipped_candidate[0]
|
||
|
||
# Compare if the flipped version and the original
|
||
# candidate are identical.
|
||
# The function returns this test result...
|
||
if listed_candidate == flipped_candidate:
|
||
return True
|
||
else:
|
||
return False
|
||
|
||
@decorators.function_timer
|
||
def main():
|
||
|
||
# Define the problem inputs...
|
||
factor_length = 3
|
||
|
||
# Calculate intermediate inputs...
|
||
max_factor = 10**(factor_length)-1
|
||
product_of_factors = max_factor * max_factor # Maximum candidate for palindrome test.
|
||
|
||
# Initialize loop parameters...
|
||
n = max_factor
|
||
m = max_factor
|
||
n_has_token = False
|
||
test_passed = False
|
||
palindrome_list=[]
|
||
|
||
while (n*m)>0:
|
||
|
||
# Test for "palindrom-iness" ...
|
||
print("{} * {} = {}".format(n,m,n*m))
|
||
test_passed = is_palindrome(n*m)
|
||
|
||
if test_passed:
|
||
palindrome_list.append(n*m)
|
||
if n_has_token:
|
||
n -= 1
|
||
if n ==1:
|
||
n_has_token = False
|
||
n = max_factor
|
||
if not n_has_token:
|
||
m -= 1
|
||
n_has_token = True
|
||
|
||
if not test_passed:
|
||
if n_has_token:
|
||
n -= 1
|
||
if n ==1:
|
||
n_has_token = False
|
||
n = max_factor
|
||
if not n_has_token:
|
||
m -= 1
|
||
n_has_token = True
|
||
|
||
|
||
|
||
|
||
|
||
print("{}".format(max(palindrome_list)))
|
||
# print("{} * {} = {}".format(n,m,n*m))
|
||
|
||
# print("The largest palindrome number which is a product of two numbers of length {} is {} ... ".format(num_digits,num_digits))
|
||
|
||
|
||
|
||
main() |