use strict;
use warnings;
doShift (2, 5);
print "\n";
doShift (3, 6);
print "\n";
sub doShift {
my ($ones, $bits, $pattern, $limit) = @_;
--$ones;
$limit ||= $bits;
$pattern ||= 0;
for my $right ($ones .. $limit - 1) {
if ($ones) {
doShift ($ones, $bits, $pattern | (1 << $right), $right);
} else {
printf "%0*b\n", $bits, $pattern | (1 << $right);
}
}
}
Prints:
00011
00101
00110
01001
01010
01100
10001
10010
10100
11000
000111
001011
001101
001110
010011
010101
010110
011001
011010
011100
100011
100101
100110
101001
101010
101100
110001
110010
110100
111000
DWIM is Perl's answer to Gödel
|