limit = 10**8 squares = [ x*x for x in xrange(1, 7200) ] def is_palindrome(n): nstr = str(n) return nstr == nstr[::-1] palindromes = set() for i in xrange(len(squares)-1): # iterate over all starting positions for j in xrange(2, len(squares)): # iterate over all possible lengths sqrsum = sum(squares[i:i+j]) if sqrsum >= limit: break if is_palindrome(sqrsum): palindromes.add(sqrsum) print sum(palindromes)