[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