#!/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 # Initialize loop parameters... n = max_factor m = max_factor n_has_token = False test_passed = False palindrome_list=[] while (n*m)>1: # Loop over all possible pairs of # integers, testing 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 ==0: n_has_token = False n = m-1 if not n_has_token: m -= 1 if m ==1: n_has_token = True m = n-1 if not test_passed: if n_has_token: n -= 1 if n ==0: n_has_token = False n = m-1 if not n_has_token: m -= 1 if m ==1: n_has_token = True m = n-1 print("The largest palindrome number which is a product of two numbers of length {} is {} ... ".format(factor_length,max(palindrome_list))) main()