in reply to Combinatorics
--Daveuse Data::Dumper; my @a = (1..4); my $len = 4; print Dumper(combinations($len, @a)); sub combinations { my ($size, @elements) = @_; return [] if $size < 1; my @result = (); foreach my $elem (@elements) { push @result, map { [$elem, @$_] } combinations($size-1, grep { $_ != $elem } @elements) } return @result; }
Update: for greater generality, replace foreach loop with
my @seen = (); while (@elements) { my $elem = shift @elements; push @result, map { [$elem, @$_] } combinations($size-1, @seen, @elements); push @seen, $elem; }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: Combinatorics
by ezekiel (Friar) on Aug 22, 2002 at 03:01 UTC |