in reply to Re^2: One Zero variants_without_repetition
in thread One Zero variants_without_repetition
Okay, sorry! Try this iterator then. It will handle upto 32 0s + 1s.
If you uncomment the second example it runs on a bit.
Update: Had to tweak the termination condition. It works now but I'm not happy with it.
Update2: D'oh! No need to count both 1s and 0s.
#! perl -slw use strict; sub combs { my( $ones, $zeros ) = @_; my $n = $ones+$zeros; my $max = 2**$n; my $p = 0; return sub { my $x = ''; $x = unpack "b$n", pack 'V', $p++ until $x =~ tr[1][] == $ones or $p > $max and return; return $x; } } my $iter = combs( 2, 3 ); print while $_ = $iter->(); #my $iter = combs( 14, 6 ); #print while $_ = $iter->(); __END__ C:\test>junk7 11000 10100 01100 10010 01010 00110 10001 01001 00101 00011
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
In Section
Seekers of Perl Wisdom