1. how can i work with (much) more that 32 1's+0's ?
You almost certainly do not need to. It could be extended to handle 53-bits quite easily, but given that it would take the fastest algorithm in this thread ~462 years to deal with the numbers possible from that small number of bits. And as your target of 435 + 343 will take, for all intents and purposes, that number * infinity--so many times longer than the universe has existed as to be totally meaningless--you simply don't.
One has to wonder what use, other than as another outing for Algorithm::Loops, that you thought you were going to put this to?
Had you been dealing with reasonable numbers, I've got a specialisation of tye's nextPermute() that handles this particular problem about 3 1/2 times more quickly, but unless your name is Q, it probably won't help :)
Update: Seems someone didn't bellieve me:
sub combs2 {
my( $z, $o ) = @_;
my $str = '0'x$z . '1'x$o;
my $l = length $str;
return sub {
my $p = 1+rindex( $str, '01' ) or return;
my $r = 1+rindex( $str, '1');
my $s = 1+rindex( $str, '0', $r-1);
substr( $str, $s, 0 ) = substr( $str, $r, $l-$r, '' );
my $q = index( $str, '1', $p );
substr( $str, $p-1, 1 ) = '1';
substr( $str, $q, 1 ) = '0';
$str;
};
}
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.
|