アナグラムのアルゴリズム
新しいサービスとかに登録するとき、
悩むというかいらいらするのはアカウント名。
いつも使っているアカウントがすでに使用されていたりして
何か違うアカウントを使いたくなったりするのも、ままある話。
私が今回はてなに登録したのはhelmokとかいう
アカウント名ですが、これは名前とかそのほか
謎の文字列を並べ替えて
何となく単語っぽくなっているところを切り出して作りました。
テキトーにPHPでこんな感じ?
<?php $str = "hoge"; $array = str_split($str); for($i = 0; $i < 100; $i++){ shuffle($array); echo join('',$array)."<br>"; } ?>
別にコードを上げるほどのものでも全然ないわけですが、
はてダの動作確認もかねて。
あまり関係ないというかこっちが本題なんですが、
最近読んでいる『珠玉のプログラミング』の最初の方に
アナグラムを見つけるアルゴリズムというのが載っています。
たとえばhoge,hog,hoeg,ohhg,ogehのなかからhogeのアナグラムを見つけるとして
やはりこんな感じ。
<?php $array = array("hoge", "hog", "hoeg", "ohhg", "ogeh"); $key = "hoge"; $sort_key = sortStr($key); foreach($array as $check){ if($sort_key === sortStr($check)){ echo $check."<br>"; } } function sortStr($str){ $array = str_split($str); sort($array); return join('',$array); } ?>
そういえば、
私はありがちな感じでだいたいPHP・JavaScript・Perl・Javaとか使います。
最近はiPhone用アプリを作っているのでObjective-Cも書きますが。