</lurk>
His Python code is not terribly pleasant:
1/ there's absolutely no need for an object, much less repeated recursive object creation
2/ The spacing is bizarre (though that might be the fault of your pasting)
3/ (minor nit) self.Outer should be self.outer
4/ His code is slooooow
5/ I consider myself a reasonable Python programmer ;-) but trying to follow that gives me a headache
6/ As others have noted it's rather inflexible
Here's a shorter simpler faster more-flexible version plus a test to demonstrate that his version is more than 5** times slower under Py2.5!!:
def make_combos(curr, *rest):
if rest:
rest = make_combos(*rest)
else:
rest = [""]
for y in rest:
for x in curr:
yield y + x
def password_generator(seeds=DEFAULT_CHAR_SET, minlen=1, maxlen=8):
chars = [seeds]*minlen
for i in range(minlen, maxlen+1):
for elem in make_combos(*chars):
yield elem
chars.append(seeds)
# insert the code for PasswordGenerator here
def test_combos():
for pwd in password_generator():
yield pwd
def test_generator():
for elem in PasswordGenerator():
yield elem
if __name__ == "__main__":
for test_type in [test_combos, test_generator]:
for i in range(3):
test = test_type().next
start = time.time()
for j in range(1000000):
test() # change to "print test()" if you want output
print time.time() - start,
print
[**To be fair, his version is slightly faster for smaller numbers and gets worse the larger the number of passwords required...]<lurk>
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.