Files
euler-project/problems/004_problem.py
2020-04-19 15:09:04 -04:00

117 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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()