I really enjoyed solving this one; palindromes have intrigued me since learned about them in grade school. Rather than repeat my mistake of getting too cute from Problem 3, I decided to brute-force this one. That approach did lead me to learn some nifty Python tricks though:
[::-1]
for reversing a stringthe new
reversed
featurexrange
for lazy range generation; I'd seen this one, but this is the first time I'd written it
Without further ado, here's my solution to Problem 4.
"""Solves Problem 4 from Project Euler.
"""
def is_palindrome(to_test):
"""Determine whether to_test is a palindrome."""
# Uses extended slice syntax to reverse a sequence.
return to_test == to_test[::-1]
def problem_4():
"""Function to solve problem 4."""
# I arrived at the values in the range by finding the smallest and largest
# products of 2 3-digit numbers.
for n in reversed(xrange(10000, 998001)):
if is_palindrome(str(n)):
for factor_1 in reversed(xrange(1000)):
for factor_2 in reversed(xrange(1000)):
if n == (factor_2 * factor_1):
return n
return 255 # Return a sentinel value to indicate failure.
if __name__ == '__main__':
print problem_4()
Back to flipping out...