def test_ispalindrome(self): self.assertEqual(euler.ispalindrome(1), True) self.assertEqual(euler.ispalindrome(11), True) self.assertEqual(euler.ispalindrome(12), False) self.assertEqual(euler.ispalindrome(111), True) self.assertEqual(euler.ispalindrome(123), False) self.assertEqual(euler.ispalindrome(1221), True) self.assertEqual(euler.ispalindrome(1231), False)
def biggestPal(): i = 100 # Smallest 3 digit number j = 100 # Largest 3 digit number maxp = 0 # all products of 3 digit numbers while i < 1000: while j < 1000: n = i * j if euler.ispalindrome(n): maxp = max(maxp, n) j += 1 i += 1 j = 0 return maxp
""" The decimal number, 585 = 1001001001 (binary), is palindromic in both bases. Find the sum of all numbers, less than one million, which are palindromic in base 10 and base 2. (Please note that the palindromic number, in either base, may not include leading zeros.) """ from euler import ispalindrome sum = 0 for n in range(1,1000000): if ispalindrome(str(n)) and ispalindrome( bin(n)[2:].lstrip('0')): # print "Palindrome: " + str(n) + " --bin-- " + bin(n) sum += n print sum
import math import euler N = 10 ** 8 sums = [] for i in xrange(1, int(math.sqrt(N))): for j in xrange(i + 1, int(math.sqrt(N)) + 1): s = sum([x ** 2 for x in xrange(i, j + 1)]) if s >= N: break if euler.ispalindrome(s): sums.append(s) print sum(set(sums))
def test_ispalindromeSingleDigit(self): self.assertTrue(ispalindrome(0)) self.assertTrue(ispalindrome(1)) self.assertTrue(ispalindrome(2)) self.assertTrue(ispalindrome(3)) self.assertTrue(ispalindrome(4)) self.assertTrue(ispalindrome(5)) self.assertTrue(ispalindrome(6)) self.assertTrue(ispalindrome(7)) self.assertTrue(ispalindrome(8)) self.assertTrue(ispalindrome(9)) self.assertFalse(ispalindrome(10)) self.assertFalse(ispalindrome('01101')) self.assertFalse(ispalindrome('1110')) self.assertTrue(ispalindrome('31313')) self.assertTrue(ispalindrome('0110')) self.assertTrue(ispalindrome('010')) self.assertTrue(ispalindrome('11')) self.assertTrue(ispalindrome('121'))
import collections import math import euler # Trial and error until we find the 5 numbers. N = 10 ** 9 I = int(round(math.sqrt(N))) J = int(round(N ** (1 / 3.0))) S = collections.defaultdict(list) # Generate all combinations of i^2 + j^3 <= N. # Save away all the palindromes. for i in range(2, I + 1): for j in range(2, J + 1): n = i ** 2 + j ** 3 if euler.ispalindrome(n): S[n].append((i, j)) palindromes = [] for key in S.keys(): if len(S[key]) == 4: palindromes.append(key) assert len(palindromes) == 5 print sum(palindromes)
#!/bin/env import euler largest_palindrome = 0 for i in range(100, 1000): for j in range(100, 1000): product = i * j if product > largest_palindrome and euler.ispalindrome(product): largest_palindrome = product print largest_palindrome