Here's a couple of code snippets I keep handy when I want to generate all combinations (no replacement) and permutations (all possible ways of combining a list of varying things). Enjoy.
You can probably see that I speak Perl with a lisp sometimes.
print "permute:\n"; print "[", join(", ", @$_), "]\n" for permute([1,2,3], [4,5,6], [7,8,9 +]); print "combinations:\n"; print "[", join(", ", @$_), "]\n" for combinations(1..5); sub permute { my $last = pop @_; unless (@_) { return map [$_], @$last; } return map { my $left = $_; map [@$left, $_], @$last } permute(@_); } sub combinations { return [] unless @_; my $first = shift; my @rest = combinations(@_); return @rest, map { [$first, @$_] } @rest; }
|
---|
Replies are listed 'Best First'. | |
---|---|
RE: Permutations and combinations
by AltBlue (Chaplain) on Aug 21, 2000 at 13:19 UTC | |
by I0 (Priest) on Apr 19, 2002 at 04:17 UTC | |
by AltBlue (Chaplain) on Apr 19, 2002 at 15:21 UTC |
Back to
Cool Uses for Perl