順列の取得
Math::Combinatoricsモジュールを使うと順列(nPk)を取得できます。
use strict;
use warnings;
use Math::Combinatorics;
my @items = qw(a b c);
# 3から3つを選ぶ順列
my @permute = permute(@items);
foreach my $p (@permute) {
print join(" ", @$p), "\n";
}
print "\n";
# 3から2つを選ぶ順列
# nPkを直接取得できないのでnCkの各々に対してkPkを取得している
my @permute_2 = map {permute(@$_)} combine(2, @items);
foreach my $p (sort { (join "\0", @$a) cmp (join "\0", @$b) } @permute_2) {
print join(" ", @$p), "\n";
}
