From c85a5c6d3f7891b2408909c4370a52e4378ef73c Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Sun, 21 Mar 2010 19:58:48 +0100 Subject: moved pandigital number generator in common module --- src/projecteuler/032.py | 38 ++------------------------------------ src/projecteuler/common.py | 27 +++++++++++++++++++++++++-- 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 + -- cgit v1.2.3