Recursion:
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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|