真剣ずしを真剣に考える

木生では唯一の通年ゲームとなった真剣ずし。
毎回先攻後攻をジャンケンで決めますが、
これ、実際は先攻・後攻どっちが有利なの?、
と疑問に思ったことはないでしょうか。

結果をみる

そこで実際に確かめてみることにしました。
ここで真剣ずしのルールをもう一度確認しましょう。

〜真剣ずしルール〜

  1. 皿の枚数は16枚
  2. 順番に2皿めくる
  3. めくった2皿が同じネタだったら、ゲット
  4. 違うネタだったら、交代
  5. ぐるぐる印の皿を選ぶと、皿回転&交代
  6. ゲットした数が多かった方の勝ち
  7. 生放送ゆえの時間制限

こんなところでしょうか。
このうち7番は除いて、最後の1枚をめくり終えるまでゲームは続けるものとします。
ではさっそく調べてみましょう。

最初に作ったのが、めくり方を全パターン調べて、
先攻後攻どちらの勝ちが多いかを調べました。
この時のカードのめくり方ですが、次のように決めました
(皆さんが神経衰弱などをやる時も、同じような方法では?)。

〜皿の選び方〜

  • 既に選ばれた皿のネタは全て記憶する
  • 新たに皿を選ぶ時は、まだ一度も選ばれていない皿を選ぶ
  • 選んだ皿のネタが既に別の皿で選ばれていたら、すぐにそれを選んでネタをゲットする
  • 既にネタのある皿が2種類とも分かっている場合は、それらをゲットする

基本的な設計としては、再帰法で全パターンを網羅して、その勝敗を累計します。
結果は以下の通りです。
ちなみに時間がかかりすぎて、14枚以上は計算できませんでした。

■結果■

ぐるぐるカードが入っている場合(本番)

枚数

先攻

後攻

引分け

4

16

8

0

6

256

240

224

8

18144

22176

0

10

1510656

1297920

820224

12

252349440

226652160

0


ぐるぐるカードが入っていない場合(参考)

枚数

先攻

後攻

引分け

4

8

16

0

6

336

384

0

8

24192

10752

5376

10

1647360

1981440

0

12

176348160

243486720

59166720

ただしこれはあくまでご参考までに。
実際の勝負は、各パターンが平等には呼び出されないからです。

〜パターンごとに呼出回数が異なることの例示〜

0 0 X X
0 X [ ] [ ]
(注)Xはぐるぐるカード

この時、3番目に選ばれるのは、「0」「X」とも、1/2です。 しかし次にランダムに選出される手は、「0」が選ばれるのが1/3、「X」が選ばれるのが2/3です。 これは「X」が1枚目に選ばれると、本来の手数が1手省かれるために起こります。

要は、ネタをゲットするまでの間にどれだけ手数を踏むかによって、そのパターンの数が決まります。 手数が多いほど、そのパターンは成立しにくくなりますので。 例えば、0,1のカードを適当に並べた場合、[0,1,0]の順序より[0,1,0,1,0]の順序の方が成立しづらいように。

で、これでは駄目だと思って、パターンを計算するのではなく、
実際の勝負をシミュレーションするプログラムを作成しました。
その結果は以下の通りです。

■結果■

ぐるぐるカードが入っている場合(本番)<単位(%)>

枚数

先攻

後攻

引分け

4

61.62

38.38

0

6

37.885

30.235

31.88

8

49.402

50.598

0

10

38.284

36.916

24.8

12

51.708

48.292

0

14

40.212

39.452

20.336

16

50.1812

49.8188

0

ご覧の通り、16枚の場合は先攻が有利のようです。
8枚の場合を除いて、どれも先攻有利ですね。
(これは先に書いたパターンの数と一致します)。
ただ皿の枚数が増えるにつれ、殆ど差がなくなってきます。
実質、どちらでも大して変わらないかと。
とりあえず‥、

「先攻がちょっとだけ有利」

■プログラム■

以下はわかる方だけどうぞ。

SushiCheck.java

SushiRandPattern.java

結果を信用していただくため、同時に誤りがあった場合に訂正していただくため、
上記の計算を行なったプログラムのソースを掲載しておきます。


[マニアックスに戻る]  [ライブラリに戻る]  [TOPに戻る]