From 8a464cf5a00a2100bbb16b448aa1152f60dacef8 Mon Sep 17 00:00:00 2001 From: Shaun Setlock Date: Mon, 20 Apr 2020 14:50:04 -0400 Subject: [PATCH] Automatic commit performed through alias... --- problems/004_problem.py | 1 - problems/005_problem.py | 100 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100755 problems/005_problem.py diff --git a/problems/004_problem.py b/problems/004_problem.py index eed6921..6c6122c 100755 --- a/problems/004_problem.py +++ b/problems/004_problem.py @@ -52,7 +52,6 @@ def main(): # 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 diff --git a/problems/005_problem.py b/problems/005_problem.py new file mode 100755 index 0000000..eed6921 --- /dev/null +++ b/problems/005_problem.py @@ -0,0 +1,100 @@ +#!/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)>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() \ No newline at end of file