diff options
| -rw-r--r-- | src/projecteuler/032.py | 2 | ||||
| -rw-r--r-- | src/projecteuler/049.py | 47 | ||||
| -rw-r--r-- | src/projecteuler/common.py | 5 |
3 files changed, 51 insertions, 3 deletions
diff --git a/src/projecteuler/032.py b/src/projecteuler/032.py index 83ff911..0958625 100644 --- a/src/projecteuler/032.py +++ b/src/projecteuler/032.py @@ -1,7 +1,7 @@ from common import pandigital -pandigital = pandigital().numbers(5) +pandigital = pandigital(9).numbers(5) pandigital.remove(1) def is_pandigital(a, b, c): diff --git a/src/projecteuler/049.py b/src/projecteuler/049.py new file mode 100644 index 0000000..fb895eb --- /dev/null +++ b/src/projecteuler/049.py @@ -0,0 +1,47 @@ +from common import sieve + +def permutation(p, q): + digits_p = [0]*10 + digits_q = [0]*10 + while p > 0: + digit = p % 10 + digits_p[digit] += 1 + p /= 10 + while q > 0: + digit = q % 10 + digits_q[digit] += 1 + q /= 10 + return digits_p == digits_q + +primes = sieve(10000).primes() +primes2 = [ x for x in primes if x > 1000 ] +primes2.sort() + +end = False +ignore = 1487 +result = [] + +for p in primes2: + for q in primes2: + if p == q: + continue + if permutation(p, q): + new = 0 + if q > p: + diff = q - p + new = q + diff + else: + diff = p - q + new = p + diff + + if new in primes and permutation(q, new) and not permutation(ignore, p): + result += [p, q, new] + end = True + if end: + break + if end: + break + +result.sort() +print str(result[0]) + str(result[1]) + str(result[2]) + diff --git a/src/projecteuler/common.py b/src/projecteuler/common.py index f3f153c..c85af4b 100644 --- a/src/projecteuler/common.py +++ b/src/projecteuler/common.py @@ -29,9 +29,10 @@ class sieve: return primeset class pandigital: - def __init__(self): + # create n-digit pandigital numbers + def __init__(self, n): self.digits = set() - for d in range(1, 10): + for d in range(1, n+1): self.digits.add(d) # return set of digits that are not in x |
