in reply to Re: How can I improve this?
in thread How can I improve this?

Since you seemed interested.. here is my permutation generator. It takes a base string (should be empty) as its first argument, then refrences to as many lists as you want as the other arguments and returns a refrence to a list containg all the list-element concatination permutations:
my $foo=permute('',[0..2],[0..2],[0..3],[0..2]); sub permute{ my $prefix=shift; my @arrays=@_; my $c=shift @arrays; my @ret=(); foreach(@$c){ my $f=$prefix.$_; if(scalar(@arrays)==0){ push @ret,$f; }else{ my $t=permute($f,@arrays); push @ret,@$t; } } return \@ret; }
I'm not really happy with the implementation of it, but I like it in spirit (of course, I'm a big fan of recursive algorithms to begin with).

Replies are listed 'Best First'.
My permutor
by merlyn (Sage) on Jul 25, 2000 at 07:57 UTC
    Well, since everyone is posting their permutors, here's mine:
    sub permute { my $last = pop @_; unless (@_) { return @$last; } return map { my $left = $_; map "$left$_", @$last } permute(@_); }

    -- Randal L. Schwartz, Perl hacker

      Drool....

      Oh I like that.

      Mmmm,
      Gryn

      does this work? how do you call it?