Kenichi Maehashi's Blog
脳内コアダンプ

アナグラムの全パターン生成
Monday | August 2, 2010
アナグラムというか、重複を考慮しない順列の全パターンを生成する。CPAN モジュールを使えば良いという話もある。頭悪い子なので非効率やも。というか、配列で作った方が良かったな。
#!/usr/bin/perl

my $word = $ARGV[0];
foreach (anagram($word)) {
print $_ . "\n";
}

sub anagram($) {
my $w = shift;
my $l = length $w;
my @result = ();

if ($l <= 1) {
@result = ($w);
} elsif ($l == 2) {
my $wr = reverse($w);
@result = ($w, $wr);
} else {
for (my $i = 0; $i < $l; $i++) {
my $f = substr($w, 0, 1);
my $r = substr($w, 1);
foreach (anagram($r)) {
push(@result, $f . $_);
}
$w = $r . $f;
}
}
return @result;
}
え、重複を考慮したい? それなら、
$ perl anagram.pl someword | sort | uniq
でできますよ :-)
コメント (0)
コメント


<< 前ページ[1]

トップページに戻る
Copyright © 2006-2021 Kenichi Maehashi, All Rights Reserved.