我有很多事情(让我们把它们称为节点......没关系),方便地称为node1,node2,... nodeN。
棘手的部分是我需要一个perl子例程,它接受一个引用一组节点的整数。我的方法是:
每个节点都有一个基于2的幂的值,如下所示:
将每个节点的值相加以生成整数。例如,节点1,3,4和7的结果为77的整数。
现在,我将如何创建一个采用类似整数的子程序并返回一个节点数组?
PS:
答案 0 :(得分:5)
将$ max设置为节点数(例如16)。
sub nodes {
my $num = shift;
return grep { $num & 2 ** $_ } 1 .. $max - 1;
}
答案 1 :(得分:1)
假设有16个节点:
sub nodes {
my ($num) = @_;
grep {($num >> ($_ - 1)) & 1} 1..16;
}
答案 2 :(得分:1)
#!/usr/bin/env perl
use strict;
use warnings;
use Const::Fast;
const my @NODE_SET => (0 .. 31);
const my @NODE_NAMES => map "node$_", @NODE_SET;
const my @POWERS_OF_2 => map 2**$_, @NODE_SET;
my @examples = (
0b10011100111001011001110011100101,
0b00010100101001111001110011100101,
0b11110001010001101001110011100101,
);
print "@$_\n" for map extract_nodes($_), @examples;
sub extract_nodes {
my $encoded_node = shift;
return [ @NODE_NAMES[
grep $POWERS_OF_2[$_] & $encoded_node, @NODE_SET
]
];
}