作者: dune
日時: 2002/5/13(08:22)
極悪です。

何かの役に立つかもしれない、順列生成スクリプト。



#!/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/