[Project Euler] Problem 4

원문: 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.

회문수는 두 방향으로 같게 읽히는 수를 말한다. 두 개의 2자리 수의 곱으로 만들어진 가장 큰 회문수는 9009 = 91 × 99 이다.
두 개의 3자리의 수의 곱으로 만들어진 가장 큰 회문수를 찾아라.

>>> def factor(num) :
    for k in range(100, int(math.sqrt(num))) :
        if num%k == 0 and (num//k>=100 and num//k<1000) :
            return True
    return False
>>> def check() :
    for a in range(9, 0, -1) :
        for b in range(9, -1, -1) :
            for c in range(9, -1, -1) :
                n = (10**5+1)*a+(10**4+10)*b+(10**3+10**2)*c
                if factor(n) :
                    return n
>>> check()

게시글에서 몇 개의 다른 코드를 보니 대단한 코드도 많이 있었다.

Python 2
Ragzouken   (Python)  Ragzouken is from England
In Python:
def palindrome(n):
n = str(n)
return n == n[::-1]
print max(a*b for b in xrange(a, 1000) for a in xrange(110, 1000, 11) if palindrome(a*b))

Python 3
RockinAndres   (Python)  RockinAndres is from USA

One line, using a list comprehension and string slice operations for palindrome checking.

max([x*y for x in range(100, 1000) for y in range(x, 1000) if str(x*y) == str(x*y)[::-1]])

댓글 없음:

댓글 쓰기