good chemistry is complicated,and a little bit messy -LW PerlMonks

### Re: loop in loop method evasion

by eye (Chaplain)
 on Dec 26, 2009 at 06:00 UTC ( #814399=note: print w/replies, xml ) Need Help??

in reply to loop in loop method evasion

Another approach to this is to recognize that your sequence of strings can form a one-to-one map with a sequence of integers. You could then use a single loop and a function to map those integers into your strings.

The trouble is that your task is enormous. You want to generate 36^15 strings. That is well over 2E+23 strings that will require in excess of 1,000,000 exabytes.

Forget the appearance of your code. You have problems if you want this to finish running this year or if you want to save these strings.

Replies are listed 'Best First'.
Re^2: loop in loop method evasion
by ikegami (Pope) on Dec 26, 2009 at 06:56 UTC

Another approach to this is to recognize that your sequence of strings can form a one-to-one map with a sequence of integers.

The advantage of this method is that it uses no memory.

```# XXX Doesn't handle negatives
sub idiv {
my (\$dividend, \$divisor) = @_;
use integer;
my \$quotient  = \$dividend / \$divisor;
my \$remainder = \$dividend - ( \$quotient * \$divisor );
return ( \$quotient, \$remainder );
}

my @chartab = (0..9, 'a'..'z');
my \$N = 3;
for (0 .. @chartab**\$N-1) {
my \$x = \$_;
for (1..\$N) {
(\$x, my \$i) = idiv(\$x, 0+@chartab);
print \$chartab[\$i];
}
print ',';
}
Re^2: loop in loop method evasion
by motzi (Sexton) on Dec 26, 2009 at 15:43 UTC
Well, about 15-character string is only theoretically task, sure i will not use that much, in practice i will only need 5-6 length string max.

Create A New User
Node Status?
node history
Node Type: note [id://814399]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (12)
As of 2017-07-24 13:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
I came, I saw, I ...

Results (354 votes). Check out past polls.