yitzle schreef:
> In a personal email conversation, he realized what he was actually
> looking for is the power set.
> List::PowerSet
> http://search.cpan.org/~nikc/List-PowerSet-0.01/lib/List/PowerSet.pm
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
sub powerset {
my $set = shift;
my $powerset = [];
my $n = @$set;
for my $i (0 .. 2 ** $n - 1) {
my $subset = [];
for my $j (0 .. $n - 1) {
push @$subset, $set->[$j] if ($i & 2 ** $j);
}
push @$powerset, $subset;
}
return $powerset;
}
sub powersubset {
my ($set, $n, $i) if 0;
if (@_) {
if (ref $_[0] eq "ARRAY") {
$set = $_[0];
$n = @$set;
if (@_ > 1) {
$i = $_[1];
}
else {
$i = undef;
return;
}
}
else {
$i = $_[0];
}
}
else {
$i = (defined $i) ? $i + 1 : 0;
return if $i >= 2 ** $n;
}
my $subset = [];
for my $j (0 .. $n - 1) {
push @$subset, $set->[$j] if ($i & 2 ** $j);
}
return $subset;
}
my $set = ['foo', 'bar', 'baz'];
my $powerset = powerset($set);
print Dumper $powerset;
print "-"x40, "\n";
my $powersubset = powersubset($set);
print Dumper $powersubset;
$powersubset = powersubset() for 0..2;
print Dumper $powersubset;
$powersubset = powersubset($_) for 0..2;
print Dumper $powersubset;
$powersubset = powersubset() for 0..2;
print Dumper $powersubset;
print "-"x40, "\n";
powersubset($set);
while (defined($powersubset = powersubset())) {
print Dumper $powersubset;
}
print "-"x40, "\n";
$powersubset = powersubset($set, 2);
print Dumper $powersubset;
__END__
--
Affijn, Ruud
"Gewoon is een tijger."
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/