Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

RE: Re: How can I improve this?

by lhoward (Vicar)
on Jul 25, 2000 at 07:51 UTC ( #24243=note: print w/replies, xml ) Need Help??

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

    by gryng (Hermit) on Jul 25, 2000 at 17:01 UTC

      Oh I like that.


      does this work? how do you call it?

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://24243]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (10)
As of 2018-01-23 14:33 GMT
Find Nodes?
    Voting Booth?
    How did you see in the new year?

    Results (248 votes). Check out past polls.