Automatic commit performed through alias...
This commit is contained in:
117
problems/004_problem.py
Normal file
117
problems/004_problem.py
Normal 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()
|
||||
Reference in New Issue
Block a user