# Problem 3: # # 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 # Create function that finds the next # prime number when supplied with an # intitial integer. 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)] #print("{}".format(listed_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): #print("{}".format(i)) flipped_candidate[-i-1] = flipped_candidate[i] flipped_candidate[-1] = flipped_candidate[0] #print("{}".format(flipped_candidate)) # Compare ... 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 not test_passed and n_has_token: # n -= 1 # if n == 1: # n_has_token = False # n = max_factor # elif not test_passed and not n_has_token: # m -= 1 # n_has_token = True # else: # palindrome_list.append(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()