Automatic commit performed through alias...

This commit is contained in:
Shaun Setlock
2020-04-19 15:09:04 -04:00
parent 79107c467e
commit 86cfb9c88e
2 changed files with 121 additions and 2 deletions

117
problems/004_problem.py Normal file
View File

@@ -0,0 +1,117 @@
# 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()