順列の取得


 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";
}

関連項目

組み合わせの取得