2012年08月12日 00:00

くじ引きアルゴリズム

 とあるオンラインゲームに、1回200円でゲーム内の装備やアイテムが当たる「くじ」がある。いや、くじがあるというだけなら昨今では全く珍しくもない事だが、このゲームに関しては少々興味深い事がある故、小生が個人的に注目していたりする。

 なぜそれに限って注目に値するかというと、その「くじ」の確率分布が明らかになってしまったためである。いや、確率分布そのものは正直どうでもいい。たとえ公式からのアナウンスで「魔法職は絶対入手しておきたいアイテム」などと謳ったものが実は入手確率0.01%であり、わかりやすく計算するとは200円のくじを1万回…つまりは200万円つぎ込まないと手に入らないレベルの物であるという事が判明してネットを騒がせていたりもするのだが、個人的に気になって仕方ない事は完全に別の場所にある。

 というのも、そもそもその確率分布が明らかになった「理由」が面白い。くじ引きの結果を表示するページ、つまり「〇〇が当たりました」というのを表示するページの末尾が、数字になっていたそうな。で、その数字を変えてアクセスしてみたところ、1万の連番ページがあり、一つ一つアクセスしてみると当たったと表示される物が変わったそうな。それが故に、1ページしか当たりのなかった目玉賞品は確率が0.01%となり、同様に5ページあるアイテムは0.05%、といった具合で1万通りの当たり具合がわかるという事だそうな。

 つまりくじ引き部分のアルゴリズムは、1万までの乱数を作って、一定数を足して、その前の方に"http://〜〜〜"という文字列を足したアドレスを返している、という事になる。小生が着目するのは、ここである。

 これを実現するためには、1万個分のページを用意しなければならない。賞品の数が1万種類あるのであれば、それでいい。だが、実際に賞品となるアイテムの数は40個かそこらである。つまり、重複するデータがやたら多い。故にどう考えたってhttpのサーバ側でアドレスを変換しているはずである。だが、本当にそれを処理すべき場所はhttpサーバであろうかと考えると、ぶっちゃけありえない話だと思う。

 乱数を振って、賞品を決める。ここまでは、いい。問題は、次だ。普通にアルゴリズムを考えれば、何が当たったかを判断する。つまり、賞品が40種類なら、0〜39なり1〜40なりの数字を吐き出す。で、相当するアイテムをキャラクターに放り込む。それと同時に、何が当たったかを表示するアドレスにジャンプする…というのが、普通の考え方であろう。

 裏を返せば、その会社はくじ引きCGIでは乱数を発生させることだけしか出来ず、それをhttpサーバ側で一生懸命何とかするという方法を採るようなレベルの会社である、という事だ。で、恐ろしいことにそんなレベルの会社が、オンラインゲームを運営しているのである。

 すげぇ。世の中、進歩したもんだ。素人だってやらないようなアルゴリズムが平然と通る会社がオンラインゲームを運営できるなんて、もはや馬鹿でもオンゲ運営できちゃうねってくらいの進歩だ。これは驚愕せずにはいられない。いや、ホント驚いた。

 だが…まさかそんな事を本当にやってる訳がなかろうて。URLの変換はhttpサーバがやってるとして、実際にそんな事をやってたりする訳がない…と思っていた。が、甘かった。

 というのも、その会社はくじの確率の話はネットで広まるとすぐに「負荷軽減」と称してこれを対策、小生が「普通」だと言ったようなアルゴリズムによるアドレス管理に変更したのだ。しかも、1〜40の数字とかではなく、ランダムな英数字を用いたある意味暗号化したアドレスにしたのである。ただ、同じアイテムは同じアドレスという状況なあたり、多分に付け焼刃的な対策であるのも事実ではあるが。

 で、このタイミングでこの対処。ボロが出たというか、馬脚を現したというか、状況から判断するにどう見てもネットに出ていた確率分布が正しかった、という見方以外には有り得ないと言えよう。ならば、結果表示もかなり阿呆なアルゴリズムが使われていたということであり、プログラミングに関してはそのレベルの会社だとう事もまた明らかだ。

 とはいえ、どんなアルゴリズムであったとしても、速度的に問題にならず動作も確実であれば、それは「問題なく動く」と判断される訳であり、いやどう見ても馬鹿すぎるだろうというアルゴリズムが表に出てしまったとはいえ、それで動いてるならまぁ…と言えなくもない訳であり…。ある意味、複雑な気持ちではある。

 ま、そんな芸術的なまでに馬鹿なアルゴリズム(この場合、褒め言葉ではない)を考えつく会社が今後どんなオンゲをいじって行くか。そう考えると、個人的に興味は尽きないのである。
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。