極悪です。
何かの役に立つかもしれない、順列生成スクリプト。
#!/usr/local/bin/perl
use strict;
#
# _perm() - perm() が使う内部ルーチン
#
sub _perm{
my($perm,$done,$list) = @_;
my @list = @{$list};
if($#list < 0){
push(@{$perm},$done);
return;
}
my @done = @{$done};
foreach(0..$#list){
my @l = @list;
my @d = @done;
push(@d,splice(@l,$_,1));
_perm($perm,[@d],[@l]);
}
}
#
# perm() - 順列を求める関数
# 例えば perm(x,y) は ([x,y],[y,x]) を返す。
#
sub perm{
my @perm;
_perm(\@perm,[],[@_]);
return @perm;
}
#
# 使用例
#
print "@{$_}\n" foreach perm(@ARGV);
__END__
このスクリプトで、
%perl perm.pl x y
x y
y x
%perl perm.pl 1 2 3 4 5
1 2 3 4 5
1 2 3 5 4
1 2 4 3 5
〜中略〜
5 4 2 3 1
5 4 3 1 2
5 4 3 2 1
%
といったことが可能。
--
FZH01112@..., http://www1.u-netsurf.ne.jp/~dune/