数当てゲーム(イージスコードのアレ)の戦略
はじめに
イージスコードの数当てゲームやってて、これの最適戦略どうすればいいんだろう、と思って、色々な戦略を考案して試してみた。
イージスコードの軽い説明
イージスコードは所謂ソシャゲなのだが、戦闘システムが数当てになってる。数当ては、
- 0から9までの数字を3桁
- 数字の重複はしない
- 1度数字を決めると、Hit(位置が正しい数字)とBlow(位置は間違ってるけど別の場所にある数字)の数が分かる
というルールで行う。ので、選べる数字は最初720パターンあって、数字を回答すればそのHitとBlowの数から数字がどんどん絞り込める訳である。
やること
上のツールとかを使い、候補が全て分かっていることを前提として、どのような数字を選んでいけば
- 最も早く数字を当てられるか(countが少ない方が良い)
- 最もダメージを稼げるか(damageが多い方が良い。全部当てたHIT3の場合を0としてその差分をマイナスして計算)
を計算する。ダメージ倍率は
http://senkosinki.gamerch.com/%E3%83%80%E3%83%A1%E3%83%BC%E3%82%B8%E8%A8%88%E7%AE%97%E5%BC%8F
を参照
幸い選べる数字は720パターンしかないので、全部の場合で試して合計を取れば良い。
試した戦略
- HeadStrategy
- 候補の先頭をそのまま選ぶ。処理が早い
- RandomStrategy
- 候補の中からランダムに選ぶ
- DiscreteStrategy
- 同じ数字をできるだけ使わないように選ぶ
- PointStrategy
- 候補毎にpointを出して、その数値が一番デカいのを選ぶ。Pointの計算方法として、数字が被るとPointが下がる計算方法を考案
- WikiStrategy
- Wikiに書いてある奴 http://senkosinki.gamerch.com/%E6%95%B0%E5%AD%97%E5%BD%93%E3%81%A6%E3%81%AE%E3%82%B3%E3%83%84 ただし2回目しか書いてないので、それ以外は他のStrategyを選択する
- NewWiki
- 下のコメントにある「次の候補数の二乗の和が一番小さいのを選ぶ」Strategy。PointStrategyの一種として実装
結果
Strategy | count | damage |
---|---|---|
Head | 3469 | -4613 |
Random1 | 3422 | -4553 |
Random2 | 3412 | -4535 |
Random3 | 3474 | -4668 |
DiscreteStrategy | 3489 | -5259 |
Point | 3469 | -4613 |
Wiki + Head | 3590 | -4700 |
Wiki + Random | 3533 | -4629 |
Wiki + Discrete | 3537 | -5326 |
Point + NewWiki | 3362 | -4471 |
実際に書いたコードはこちら
https://github.com/ponkotuy/AegisStrategy
下のコメントで出てきた「通り数の二乗の和が最小になるものを選ぶ」というStrategyが一番優秀なもよう。次点でランダムなので、他は「余計なことするぐらいなら適当に候補から選んどけよ」ってことらしい。
まとめ
結局ランダムが一番早いという驚愕の結果になった訳だが、他に面白いアルゴリズムとか思い付いたら、簡単に試せるので、試してみると面白いと思う。