my @n = (-25, 14, 50, 20, -7, -8, -10);
my $max = 2**@n;
for (my $i = 0; $i < $max; ++$i) {
my $sum = 0;
$sum += $n[$_] for grep $i & 2**$_, 0 .. $#n;
if ($sum == 0) {
my ($bits, @used) = $i;
while ($bits) {
my $high_bit = int(log($bits)/log(2));
push @used, $n[$high_bit];
$bits &= ~(2**$high_bit);
}
print "[@used] = 0\n";
}
}
####
my ($bits, $j, @used) = ($i, 0);
while ($bits) {
push @used, $n[$j] if $bits & 1;
$bits >>= 1, ++$j;
}
####
for (
my ($bits, $j, @used) = ($i, 0);
$bits;
$bits >>= 1, ++$j
) {
push @used, $n[$j] if $bits & 1;
}