Math::Combinatoricsでアナグラム

/ Perl / Comment[0]
アナグラムの解析とかパスワード辞書の作成とかで使えそう

$ sudo apt-get install libmath-combinatorics-perl

#!/usr/bin/perl
use Math::Combinatorics;
print join("\n", map { join "", @$_ } permute(@ARGV)),"\n";


$ ./combi.pl み ん な い き て い る
:
いきるなていんみ
いきるいみんなて
いきるいみんてな
いきるいみなんて
:

$ ./combi.pl alpha bravo charlie delta echo
alphabravocharliedeltaecho
alphabravocharlieechodelta
alphabravodeltacharlieecho
alphabravodeltaechocharlie
alphabravoechocharliedelta
:



#!/usr/bin/perl
use Math::Combinatorics;
@n = split("","@ARGV");
print join("\n", map { join "", @$_ } permute(@n)),"\n";


$ ./combi.pl どらえもん
どらえもん
どらえんも
どらもえん
どらもんえ
:

$ ./combi.pl gotoumai
:
agumioto
agumioot
agumitoo
agumitoo
agumioot
agumioto
:


辞書ファイルから1行ずつ取り出して色々連結してみる
#!/usr/bin/perl
use Math::Combinatorics;

open(F, "<$ARGV[-1]");
@line = <F>;
@word = split(" ","@line");
close(F);

foreach $r (2..4){
@str = join("\n", map{ join "", @$_} combine($r,@word)),"\n";
print @str,"\n";
}

$ wc -l simple.dic
50 simple.dic
$ ./combi.pl simple.dic > passwd.dic
$ wc -l passwd.dic
251125 passwd.dic
$ head passwd.dic
00001111
00001223334444
0000122333444455555
00001234
000012345678
0000123xxxyyy
0000DEFAULT
0000Default
0000LOGIN
0000Password
関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可