[Vienna-pm] pseudo-bitmask to ints
Josef
e9427749 at stud4.tuwien.ac.at
Wed Oct 24 11:13:30 PDT 2007
Nochmals, hai!
Josef schrieb:
> Neben glob gebt's da das Regexp::Genex Modul.
Zu glob() fällt mir noch ein das dies - falls der
Eingabestring von ausserhalb abgeleitet wird -
dann "pseudobitmask2int" zum Ausspionieren des
Dateisystems (auf älteren Perls auch Ausführen von
beliebigen Systembefehlen) verwendet werden kann.
Also Eingabe prüfen.
Hier eine Variante für die die Windoof™ nicht mögen,
dafür Gefahr umso mehr. >:->
sub pseudobitmask2int ($)
{ my ($bm)=@_;
open (my $fh, '-|',
qq{eval echo "ibase=2\;"`echo '$bm\;'|sed 's/\?/{0,1}/g'`|bc});
return <$fh>
}
> (Ansonsten fielen mir noch *::Combinatorics und
use strict;
use warnings;
use Algorithm::Combinatorics qw(variations_with_repetition);
sub _fillin ($@)
{ my $template=shift;
$template=~s/\?/ shift /ge;
return oct("0b$template");
}
sub pseudobitmask2ints ($)
{ my ($bm)=@_;
return map { _fillin($bm,@$_) }
variations_with_repetition([0,1], $bm=~tr/?/?/);
}
Gefällt mir so eigentlich ganz gut...
> 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');
obwohl·wohl·keinem·mehr·interessieren·wird-lichst,
Jo "kurzzeitig verschickfreudig" sef
More information about the Vienna-pm
mailing list