summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2010-03-21 19:58:48 +0100
committerReiner Herrmann <reiner@reiner-h.de>2014-08-31 20:32:41 +0200
commitc85a5c6d3f7891b2408909c4370a52e4378ef73c (patch)
tree4628e57f147d2019da3bdf9a5dcbc0ecf6b2f06d
parented91963d9bb5046ca452e73c6c8a9e60e6d67c08 (diff)
moved pandigital number generator in common module
-rw-r--r--src/projecteuler/032.py38
-rw-r--r--src/projecteuler/common.py27
2 files changed, 27 insertions, 38 deletions
diff --git a/src/projecteuler/032.py b/src/projecteuler/032.py
index 86b0956..83ff911 100644
--- a/src/projecteuler/032.py
+++ b/src/projecteuler/032.py
@@ -1,43 +1,9 @@
-digits = set()
-digits.add(1)
-digits.add(2)
-digits.add(3)
-digits.add(4)
-digits.add(5)
-digits.add(6)
-digits.add(7)
-digits.add(8)
-digits.add(9)
+from common import pandigital
-pandigital = set()
-pandigital.add(1)
-pandigital.add(2)
-pandigital.add(3)
-pandigital.add(4)
-pandigital.add(5)
-pandigital.add(6)
-pandigital.add(7)
-pandigital.add(8)
-pandigital.add(9)
-
-# return digits that are not in x
-def missing(x):
- d = set()
- while x > 0:
- d.add(x % 10)
- x /= 10
- return digits - d
-
-for i in range(2, 5):
- new = set()
- for x in pandigital:
- for y in missing(x):
- new.add(x*10 + y)
- pandigital |= new
+pandigital = pandigital().numbers(5)
pandigital.remove(1)
-
def is_pandigital(a, b, c):
d = [0]*10
while a > 0:
diff --git a/src/projecteuler/common.py b/src/projecteuler/common.py
index dafed9c..f3f153c 100644
--- a/src/projecteuler/common.py
+++ b/src/projecteuler/common.py
@@ -1,7 +1,5 @@
class sieve:
- limit = 100
-
def __init__(self, limit):
self.limit = limit
self.number_list = [False] + [True]*(self.limit-1)
@@ -30,3 +28,28 @@ class sieve:
primeset.add(i)
return primeset
+class pandigital:
+ def __init__(self):
+ self.digits = set()
+ for d in range(1, 10):
+ self.digits.add(d)
+
+ # return set of digits that are not in x
+ def missing(self, x):
+ d = set()
+ while x > 0:
+ d.add(x % 10)
+ x /= 10
+ return self.digits - d
+
+ def numbers(self, r):
+ result = set()
+ result |= self.digits
+ for i in range(2, r):
+ new = set()
+ for x in result:
+ for y in self.missing(x):
+ new.add(x*10 + y)
+ result |= new
+ return result
+