[Vienna-pm] pseudo-bitmask to ints
Josef
e9427749 at stud4.tuwien.ac.at
Tue Oct 23 12:57:46 PDT 2007
Hi, allerseits!
Neben glob gebt's da das Regexp::Genex Modul.
(Ansonsten fielen mir noch *::Combinatorics und
Quantum::Superpositions ein ;-)
Aber aus sportlichen Gründen noch eine Variante
ohne glob und Co.
use strict;
use warnings;
sub pseudobitmask2bitmasks (@);
sub binstr2num (@);
sub pseudobitmasks2ints (@)
{ return binstr2num pseudobitmask2bitmasks @_ }
sub pseudobitmask2bitmasks (@)
{ return map {
/^([01]*)\?(.*)$/ ? pseudobitmask2bitmasks("${1}0$2","${1}1$2") : $_;
} @_;
}
sub binstr2num (@) { return map { oct("0b$_") } @_ }
# test
print join ', ',pseudobitmasks2ints('1??1');
9, 11, 13, 15
----------
Und für die die einem Quanten-Computer ihr eigen nennen:
use strict;
use warnings;
use Quantum::Superpositions qw(any eigenstates);
sub pseudobitmask2superint ($)
{ my @maskbits=split '',$_[0];
my $ret=0;
my $cat=any(1,0); # 1=lebt, 0=tot
for (my $f=1,my $bit;defined($bit=pop @maskbits);$f<<=1)
{ $ret+= ($bit eq '?' ? $cat : $bit) * $f }
return $ret
}
# test
print "passt!\n" if pseudobitmask2superint('1??1')==11;
print join ', ',eigenstates pseudobitmask2superint('1??1');
pfiateng,
Josef
More information about the Vienna-pm
mailing list