作者: 閑舎
日時: 2002/11/14(15:01)
 皆さん、こんにちは。

 最近書いてないので、ひとつ書かせていただきます。今日必要があって作りま
した。これはコマンドラインから与える全文字を重ならないようにして取りだし
てできる全順列を求めるものです。

  $ perl mkperm.pl abc

の結果は、

  
  a
  ab
  abc
  ac
  acb
  b
  ba
  bac
  bc
  bca
  c
  ca
  cab
  cb
  cba

となります。空文字列も入ってますが、わざと入れています。関数 hoge の部分
は今表示のみになっていますが、ここに何か処理を書くことによって、生成され
た各順列に対して仕事ができます。以前 dune さんが書かれたのと似てますが、
少し違うので UP しました。

---^ mkperm.pl
$str = shift;
perm("", $str);

sub perm {
  my ($pre, $rest) = @_;

  hoge($pre);
  for(my $i = 0; $i < length($rest); $i++) {
    perm($pre . substr($rest, $i, 1), substr($rest, 0, $i) . substr($rest, $i + 1));
  }
}

sub hoge {
  my ($str) = @_;

  print "$str\n";
}
---$

 皆さんも、何か役立ちそうな、みじかいスクリプトがありましたら書いてみて
ください。

# TSNET は 12 月か 1 月に回線を光にするのに伴い、サーバを一新しますので、
# その際 1 日程度お休みします。またお知らせします。

--
本田博通(閑舎)
テキストとスクリプトの http://rakunet.org/TSNET/