summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2010-03-21 22:58:35 +0100
committerReiner Herrmann <reiner@reiner-h.de>2014-08-31 20:32:41 +0200
commit516fcff8634ce3010a41856ad0ff3bf87bc2b9c7 (patch)
treead70bcf3ca136681e5c0bd3fb30ad52e7e1680f1
parentc85a5c6d3f7891b2408909c4370a52e4378ef73c (diff)
projecteuler solution for #49; minor changes to pandigital
-rw-r--r--src/projecteuler/032.py2
-rw-r--r--src/projecteuler/049.py47
-rw-r--r--src/projecteuler/common.py5
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