入力したキーワードををMD5でハッシュ化し、先頭48ビット(16進×12文字)を以下のようにステータスに割り当てて計算しています。
※ 日本語の全角文字の場合、文字コードはSJISとして扱います。
項目 | 攻 撃 | 防 御 | 命 中 | 運 | HP | 素早さ | ||||||
MD5値(16進) | e | d | d | c | e | 0 | 3 | 5 | 1 | a | 0 | 1 |
MD5値(10進) | 237 | 220 | 224 | 53 | 26 | 1 | ||||||
値 | 94 | 88 | 89 | 29 | 120 | 10 |
ステータスに使用されるハッシュ値を10進化して合計値を算出し、その値を基準にして星の数を決めています
分布の適性値はよくわからなかったので、とりあえず合計値のとりうる範囲(0~1530)を7等分して星の数を確定するようにしました。
戦闘のパターン(与えるダメージ数や回避の有無)もハッシュ値で決めています。
ランダム要素はないので何回やっても同じ結果になります。
ステータスの各値の分布は0~255の均等分布です。
それぞれのステータス単体で見ると、どの値の出現率は同じです。
中心極限定理によると、独立かつ同一分布に従う確率変数の和は、規模が大きくなるにつれて正規分布に近づくそうです。
すなわち、合計値が高いステータス(低いステータス)ほど出にくくなり、ほどよいレアリティを出すことができます。
理論上、最強のステータスが出る確立は約1兆分の1です。
現代のPCのCPUを使えば、総当たりで最強コードは簡単に見つけることは可能だと思いますが、意味のある言葉で最強のキーワードを見つけるのは難しそうです。
ハッシュ計算の元となるキーワードの文字コードはSJISもしくはUTF-8です。基本的に、日本語はSJISからハッシュ値を計算し、それ以外の言語はUTF-8からハッシュ値を計算します。
※ 以前は、日本語のページと他言語(韓国語等)のページが分かれていたので、それぞれで別の文字コードを使用していました。そのため同じキーワードでも入力するページが異なると出力結果が変わるという問題が発生していました。今回はこの問題を解決し、どの言語でも一つのキーワードから生成されるステータスは1種類となるように、ソースを修正しました。