Category:
Computer
アナグラムというか、重複を考慮しない順列の全パターンを生成する。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でできますよ :-)
Comments