キャントストップ・エクスプレスで進める確率を計算してみる

ボードゲームアリーナでも遊べるボードゲーム、キャントストップ・エクスプレス(Can't Stop Express)の効率の良いプレイを目指し、ダイスの出目の確率を計算するプログラムを作成して検討してみた。

boardgamearena.com

キャントストップ・エクスプレス(Can't Stop Express)とは

大まかなゲームの流れは以下の通り。

  1. ダイスを5個振る
  2. 5つのダイスを「ダイス2つのペア2組」と「第5のダイス」に分ける
  3. 2.の組み合わせから1つを選びスコアパッドに記入する
  4. 記入ができなくなったら、そのプレイヤーはゲーム終了
  5. 全プレイヤーがゲーム終了した際に、スコアが最も高いプレイヤーが勝利

スコアパッドには「ダイス2つのペアの合計」と「第5のダイス」をそれぞれ記入していく。例えば上の画像の場面で、(第5のダイス, ペアの合計1, ペアの合計2) = (3, 8, 8) を選択した場合、スコアパッドには以下のように記録される。

これを繰り返していき、「第5のダイス」の8番目のマスが埋まったらそのプレイヤーはゲーム終了。点数計算はスコアパッドの各行に対して以下の要領で点数を出し、合計値がプレイヤーの得点となる。

  • 0個:0点
  • 1~4個:マイナス200点
  • 5個:0点
  • 6~10個:各数字に応じた得点(A列に記載の点数)×右側にチェックされた数(チェック数-5)

より詳細なルールは以下のページから。

ja.doc.boardgamearena.com

個人的に取っている戦略

確率計算の前に、個人的に取っている戦略を書いてみる。前提として考えることは以下の2つ。

  1. マイナス200点は得られるプラス点1マス分に比べて大きい
  2. ダイス2つの出目の合計は7に近いほど確率が高い

いずれも書いてみると当たり前のことではあるが、これらから以下の戦略をとる。

  1. 第5のダイスとして (1,2,6), (1,5,6) の組み合わせを選ぶ
  2. 「ダイス2つのペア」の合計として 5〜9 の範囲に収まるものを優先的に選ぶ
  3. スコアが伸ばせる場面であっても、マイナス点によるデメリットが大きいと考えられる場合は早めにゲーム終了する

1. 第5のダイスとして (1,2,6), (1,5,6) の組み合わせを選ぶ

1〜6が出る確率は等しいので、5つのダイスが振られた時点で「外れ値」となる可能性が高い1と6の目を除いておきたいという考えによる。なぜかというと、高めもしくは低めの出目のみを残した場合、より確率が低い合計値の列を選択する必要に迫られる可能性が高くなってしまうためである。そうすると、(2.とも関連してくるが)選択する合計値の列が分散する可能性が高くなり、結果としてマイナス点が残ってしまうことになってしまう。

そのため第5のダイスとしては、(1,2,6), (1,5,6) のいずれかの組み合わせを選ぶ。最悪の場合でも (1,2,3), (4,5,6) に留め、その場合は選択する出目を高めもしくは低めに少し寄せて対応する。

ただ、第5のダイスを除いた後のダイスの目が (小, 小, 大, 大) の4つであれば、(小, 大), (小, 大) の2組にしてしまえば7に近い合計値を作ることができ、1と6の目を除いた場合とそれほど変わらないのでは?という可能性は十分に考えられる。この辺りは後の確率計算で確かめてみたい。

2. 「ダイス2つのペア」の合計として 5〜9 に収まるものを優先的に選ぶ

第5のダイスの8番目のマスが埋まってしまうとゲーム終了となるので、基本的に最大ターン数は 7 x 3 + 1 = 22ターン*1となり、スコアパッドで埋められるマスは 22 x 2 = 44マスまでとなる。従って、9種類以上の合計値を選択してしまうと、すべてを0点に戻すためのマス数は 5 x 9 = 45マスとなることから、必ずどれかはマイナスが発生してしまうことが確定する。

また、プラス点を得るためには同じ合計値を6回以上選択する必要があるため、スコアを伸ばしていくためには極力選択する出目は絞るようにしたい。そのため、出る確率の高い5〜9の出目をまずは進めていき、必要に応じて他の出目も進めていくか、あるいは2や12などの低確率な出目を「捨て列」として割り切って処理するようにする。個人的な体感としては、合計値の種類は6〜7種類でゲーム終了まで行けると、マイナスのものがない理想的な点数の伸ばし方ができるように思われる。

3. スコアが伸ばせる場面であっても、マイナス点によるデメリットが大きいと考えられる場合は早めにゲーム終了する

終盤になると6, 7, 8あたりの合計値の列はマスが埋まってしまい、その列を選択しても点数が伸びなくなる場合がある。このような場面では、点数が伸びない場合が増えてくるにも関わらず、選択していない合計値を選ばざるを得ないことによるマイナス200点によるリスクが大きくなってしまう。そのため、他のプレイヤーの点数を見ながら早々にゲーム終了を選択するのが有効な場合がある。

個人的な体感としては、600点程度が確保できていればそのまま勝ち逃げできる場合が多いように思われる。当然、相手の点数が伸びているようであれば攻める必要があるが、そうでない場合は早めに切り上げるのも戦略の一つとして使える。

確率計算

上記の戦略として考えていることがどれぐらい有効かの確かめるため、確率を計算してみる。求めたい確率は以下の2つ。

  1. 第5のダイスとして N を選んだ際に、合計値が (X, Y) (X <= Y とする) となるダイス2つのペア2組が選べる確率
  2. 第5のダイスとして N を選んだ際に、合計値として Z を選べる確率

「選べる」確率としているのは、出目の組み合わせに対して選択肢が複数存在しているためである。

例えば、ダイスの出目が (1,2,3,4,6) だった場合に、第5のダイスとして 1 を選んだ場合を考えると、

  • 選べる (X, Y) → (5, 10), (6, 9), (7, 8)
  • 選べる Z → 5, 6, 7, 8, 9, 10

となり、第5のダイスとして 6 を選んだ場合を考えると、

  • 選べる (X, Y) → (3, 7), (4, 6), (5, 5)
  • 選べる Z → 3, 4, 5, 6, 7

となる。これらは選択肢によって独立した事象ではあるが、それぞれ「選べる」場合の数として数え上げているため、第5のダイスについて求めた確率をすべて足し合わせても100%になるわけではない。要約すると、「第5のダイスとして N を選んだ時に、この合計値を選択できる確率がどのぐらいか?」ということを見るために計算をしている。

適当なスクリプトを書いて確率を計算してみる。内容としては以下の通り*2

  1. ダイス d1, d2, d3, d4, d5 を振る。
  2. 1つを第5のダイス n、残りをダイス2つのペア2組に分け、合計値の小さい方を x、大きい方を y として、(n, x, y) の組み合わせを作る。
  3. 1.で出た目の組み合わせにおける全ての (n, x, y) の組み合わせを、set に入れて重複排除する。
  4. 重複排除したものを、(n, x, y) ごとに +1 する。これをダイス5つ出目の全パターン {6}^{5} = 7776 通り分行う。
  5. (n, x, y) が選べる組み合わせの数を、全体の組み合わせ数で割って確率を出す。「第5のダイスとして N を選んだ際」の確率のため、全体の組み合わせ数は N が選べる場合の数 {6}^{5} - {5}^{5} = 4651 で計算している。
dice = [1, 2, 3, 4, 5, 6]
count = {}

for n in range(1, 6+1):
  for x in range (2, 12+1):
    for y in range(x, 12+1):
      count[(n, x, y)] = 0

for d1 in dice:
  for d2 in dice:
    for d3 in dice:
      for d4 in dice:
        for d5 in dice:
          tmp = set()
          tmp.add((d1, min(d2+d3, d4+d5), max(d2+d3, d4+d5)))
          tmp.add((d1, min(d2+d4, d3+d5), max(d2+d4, d3+d5)))
          tmp.add((d1, min(d2+d5, d3+d4), max(d2+d5, d3+d4)))
          tmp.add((d2, min(d1+d3, d4+d5), max(d1+d3, d4+d5)))
          tmp.add((d2, min(d1+d4, d3+d5), max(d1+d4, d3+d5)))
          tmp.add((d2, min(d1+d5, d3+d4), max(d1+d5, d3+d4)))
          tmp.add((d3, min(d1+d2, d4+d5), max(d1+d2, d4+d5)))
          tmp.add((d3, min(d1+d4, d2+d5), max(d1+d4, d2+d5)))
          tmp.add((d3, min(d1+d5, d2+d4), max(d1+d5, d2+d4)))
          tmp.add((d4, min(d1+d2, d3+d5), max(d1+d2, d3+d5)))
          tmp.add((d4, min(d1+d3, d2+d5), max(d1+d3, d2+d5)))
          tmp.add((d4, min(d1+d5, d2+d3), max(d1+d5, d2+d3)))
          tmp.add((d5, min(d1+d2, d3+d4), max(d1+d2, d3+d4)))
          tmp.add((d5, min(d1+d3, d2+d4), max(d1+d3, d2+d4)))
          tmp.add((d5, min(d1+d4, d2+d3), max(d1+d4, d2+d3)))

          for s in tmp:
            count[s] += 1

for con in count:
  print(con, count[con], '{:.4f}%'.format(count[con]*100/((6**5)-(5**5))))

2.の合計値として Z を選べる確率については、上記スクリプトで出力した内容を Google Spreadsheet で集計する形で計算した*3

1. 第5のダイスとして N を選んだ際に、合計値が (X, Y) となるダイス2つのペア2組が選べる確率

第5のダイスごとに、合計値が (X, Y) となる確率を表にまとめてみた。同じ形式の大きめの表が並んでしまい見にくかったため折りたたんでおり、以下それぞれの表のタイトル部分をクリックすると表示される。

第5のダイスとして 1 を選んだ場合

X\Y 2 3 4 5 6 7 8 9 10 11 12
2 0.022% - - - - - - - - - -
3 0.108% 0.215% - - - - - - - - -
4 0.323% 0.645% 0.968% - - - - - - - -
5 0.538% 1.075% 2.150% 2.150% - - - - - - -
6 0.753% 1.720% 3.655% 4.730% 4.193% - - - - - -
7 0.968% 2.365% 4.730% 6.235% 8.600% 6.665% - - - - -
8 1.075% 2.580% 4.945% 6.665% 9.245% 10.750% 6.558% - - - -
9 0.860% 2.580% 4.515% 5.805% 7.525% 8.385% 8.170% 3.870% - - -
10 0.645% 1.935% 3.870% 5.160% 6.020% 6.880% 6.665% 4.300% 2.043% - -
11 0.430% 1.290% 2.580% 3.870% 4.515% 4.515% 3.870% 2.580% 1.720% 0.645% -
12 0.215% 0.645% 1.290% 1.935% 2.580% 2.795% 2.365% 1.720% 1.075% 0.430% 0.108%

第5のダイスとして 2 を選んだ場合

X\Y 2 3 4 5 6 7 8 9 10 11 12
2 0.108% - - - - - - - - - -
3 0.215% 0.215% - - - - - - - - -
4 0.645% 0.753% 1.097% - - - - - - - -
5 1.075% 1.075% 2.473% 2.150% - - - - - - -
6 1.720% 1.720% 3.763% 5.160% 4.193% - - - - - -
7 2.365% 2.365% 4.838% 6.235% 9.245% 6.665% - - - - -
8 2.580% 2.365% 4.623% 6.020% 7.525% 9.245% 4.193% - - - -
9 2.580% 2.580% 4.730% 5.805% 7.525% 8.385% 6.235% 3.870% - - -
10 1.935% 1.935% 4.515% 4.515% 6.235% 6.665% 5.375% 4.300% 2.043% - -
11 1.290% 1.290% 3.010% 3.870% 3.870% 4.515% 3.225% 2.580% 1.720% 0.645% -
12 0.645% 0.645% 1.505% 1.935% 2.580% 2.365% 2.150% 1.720% 1.075% 0.430% 0.108%

第5のダイスとして 3 を選んだ場合

X\Y 2 3 4 5 6 7 8 9 10 11 12
2 0.108% - - - - - - - - - -
3 0.430% 0.645% - - - - - - - - -
4 0.860% 1.075% 0.968% - - - - - - - -
5 1.075% 1.935% 2.580% 2.150% - - - - - - -
6 1.935% 3.010% 3.978% 5.053% 4.752% - - - - - -
7 2.365% 3.870% 4.730% 6.880% 9.353% 6.665% - - - - -
8 2.580% 3.870% 4.085% 6.020% 8.278% 9.030% 4.193% - - - -
9 1.935% 3.870% 3.655% 4.300% 5.698% 6.880% 5.375% 2.150% - - -
10 1.935% 3.870% 3.870% 4.515% 6.235% 6.880% 5.160% 3.010% 2.043% - -
11 1.290% 2.580% 2.580% 3.870% 4.300% 3.870% 3.225% 1.935% 1.720% 0.645% -
12 0.645% 1.290% 1.290% 1.935% 2.795% 2.365% 1.720% 1.505% 1.075% 0.430% 0.108%

第5のダイスとして 4 を選んだ場合

X\Y 2 3 4 5 6 7 8 9 10 11 12
2 0.108% - - - - - - - - - -
3 0.430% 0.645% - - - - - - - - -
4 1.075% 1.720% 2.043% - - - - - - - -
5 1.505% 1.935% 3.010% 2.150% - - - - - - -
6 1.720% 3.225% 5.160% 5.375% 4.193% - - - - - -
7 2.365% 3.870% 6.880% 6.880% 9.030% 6.665% - - - - -
8 2.795% 4.300% 6.235% 5.698% 8.278% 9.353% 4.752% - - - -
9 1.935% 3.870% 4.515% 4.300% 6.020% 6.880% 5.053% 2.150% - - -
10 1.290% 2.580% 3.870% 3.655% 4.085% 4.730% 3.978% 2.580% 0.968% - -
11 1.290% 2.580% 3.870% 3.870% 3.870% 3.870% 3.010% 1.935% 1.075% 0.645% -
12 0.645% 1.290% 1.935% 1.935% 2.580% 2.365% 1.935% 1.075% 0.860% 0.430% 0.108%

第5のダイスとして 5 を選んだ場合

X\Y 2 3 4 5 6 7 8 9 10 11 12
2 0.108% - - - - - - - - - -
3 0.430% 0.645% - - - - - - - - -
4 1.075% 1.720% 2.043% - - - - - - - -
5 1.720% 2.580% 4.300% 3.870% - - - - - - -
6 2.150% 3.225% 5.375% 6.235% 4.193% - - - - - -
7 2.365% 4.515% 6.665% 8.385% 9.245% 6.665% - - - - -
8 2.580% 3.870% 6.235% 7.525% 7.525% 9.245% 4.193% - - - -
9 1.935% 3.870% 4.515% 5.805% 6.020% 6.235% 5.160% 2.150% - - -
10 1.505% 3.010% 4.515% 4.730% 4.623% 4.838% 3.763% 2.473% 1.097% - -
11 0.645% 1.290% 1.935% 2.580% 2.365% 2.365% 1.720% 1.075% 0.753% 0.215% -
12 0.645% 1.290% 1.935% 2.580% 2.580% 2.365% 1.720% 1.075% 0.645% 0.215% 0.108%

第5のダイスとして 6 を選んだ場合

X\Y 2 3 4 5 6 7 8 9 10 11 12
2 0.108% - - - - - - - - - -
3 0.430% 0.645% - - - - - - - - -
4 1.075% 1.720% 2.043% - - - - - - - -
5 1.720% 2.580% 4.300% 3.870% - - - - - - -
6 2.365% 3.870% 6.665% 8.170% 6.558% - - - - - -
7 2.795% 4.515% 6.880% 8.385% 10.750% 6.665% - - - - -
8 2.580% 4.515% 6.020% 7.525% 9.245% 8.600% 4.193% - - - -
9 1.935% 3.870% 5.160% 5.805% 6.665% 6.235% 4.730% 2.150% - - -
10 1.290% 2.580% 3.870% 4.515% 4.945% 4.730% 3.655% 2.150% 0.968% - -
11 0.645% 1.290% 1.935% 2.580% 2.580% 2.365% 1.720% 1.075% 0.645% 0.215% -
12 0.215% 0.430% 0.645% 0.860% 1.075% 0.968% 0.753% 0.538% 0.323% 0.108% 0.022%

2. 第5のダイスとして N を選んだ際に、少なくとも合計値 Z が選べる確率

表にまとめると以下のようになる。

N\Z 2 3 4 5 6 7 8 9 10 11 12
1 5.93% 15.16% 29.67% 40.31% 53.54% 62.89% 62.89% 50.31% 40.31% 26.45% 15.16%
2 15.16% 15.16% 31.95% 40.31% 53.54% 62.89% 53.54% 50.31% 40.31% 26.45% 15.16%
3 15.16% 26.45% 29.67% 40.31% 55.39% 62.89% 53.54% 40.31% 40.31% 26.45% 15.16%
4 15.16% 26.45% 40.31% 40.31% 53.54% 62.89% 55.39% 40.31% 29.67% 26.45% 15.16%
5 15.16% 26.45% 40.31% 50.31% 53.54% 62.89% 53.54% 40.31% 31.95% 15.16% 15.16%
6 15.16% 26.45% 40.31% 50.31% 62.89% 62.89% 53.54% 40.31% 29.67% 15.16% 5.93%

縦軸に確率、横軸に合計値 Z をとってグラフにしてみると以下のようになる。7を中心とした線対称の綺麗なグラフになった。

考察

確率の表とグラフを見て、個人的に取っている戦略がどのぐらい有効かを検討してみる。

1. 第5のダイスとして N を選んだ際に、合計値が (X, Y) となるダイス2つのペア2組が選べる確率

どの第5のダイスでも X, Y が7に近いほど確率が高くなる、というのは想定の通りであったが、(7, 7) の組み合わせが最も確率が高くなるわけではなかった。最も選びやすい/選びにくい (X, Y) だけを抽出してみると、以下のようになる。

第5のダイス 選びやすい(X, Y) 確率 選びにくい(X, Y) 確率
1 (7, 8) 10.750% (2, 2) 0.022%
2 (6, 7), (7, 8) 9.245% (2, 2), (12, 12) 0.108%
3 (6, 7) 9.353% (2, 2), (12, 12) 0.108%
4 (7, 8) 9.353% (2, 2), (12, 12) 0.108%
5 (6, 7), (7, 8) 9.245% (2, 2), (12, 12) 0.108%
6 (6, 7) 10.750% (12, 12) 0.022%

第5のダイスにどれを選んだとしても、最も選びやすい (X, Y) は必ず7を含んでおり、もう1つは6または8であったことから、これら3つの列は伸ばしておいてもほぼ確実にマイナスになることはなさそうに思われる。

反対に、(2, 2), (12, 12) が選べる確率は 0.1% 程度と圧倒的に低く、これが選べる場合にはマイナスとなる列を1~2つ程度許容してでも 2 もしくは 12 で多くの加点を狙う、という戦略も選択肢に入ってくるのではないかと思う。

2. 第5のダイスとして N を選んだ際に、少なくとも合計値 Z が選べる確率

第5のダイスとして何を選んでも、7を選べる確率には差がなかった。これは少し意外ではあったが、個人的に取っている戦略の1.でも書いた通り、第5のダイスを除いた後に合計が7となる (小, 大) の出目が残っていれば良いためと考えれば自然なものかと思う。これより、序盤の目が極端に偏っていない限り、合計値7の列を進めておくのはマイナス回避のための保険として良さそうである。

また、合計値が7から1ずつ増減するにつれて、第5のダイスが小さい/大きい方から選べる確率が10%ぐらいずつ差が出てくることが見てとれる。マイナス点回避のために、確率の高い合計値5,6,8,9の選べる確率の高さを考慮すると、1と6を第5のダイスとして選んでおくのは戦略として有効と言えそうである。

1.でも少し触れたが、2 もしくは 12 を伸ばしたい場合は確率 15% 程度に賭ける必要があり、最大ターン数が基本的には22であることを考えると単純計算で約3.3マスしか伸ばせないことになる。このことから、2 もしくは 12 を伸ばすようなプレイで勝ちたい場合は、序盤である程度マス数を確保できている、かつ積極的に 2 もしくは 12 を選択していく必要があり、ある程度出目が偏っている場でないと勝ち切ることは難しいように思う。

まとめ

確率計算をしてみたが、失点回避をメインとしてプレイしたい場合には、7周辺の列に集中させる戦略はある程度間違っていなさそうであることが確認できたかと思う。ただし、(キャント・ストップの際と同じ結論にはなってしまうが)上記はあくまで確率上の話であるため、ゲーム中の出目が偏っていた場合や、勝つためにある程度リスクを取らないといけない場合も多い点には注意が必要である。その辺りの駆け引きのようなものがゲームとしての面白さになってくるように感じる。

日本語版はまだ出ていないようではあるが、ルールは上記の通りであることから英語版でもプレイする分に問題はなさそうであり、ボードゲームアリーナでも手軽に遊ぶことができる*4。この記事がプレイする際に何かしらの参考になれば幸いである。

*1:第5のダイスとして選んだ出目が、5つのダイスの出目に無かった場合はこれより延ばせるが、発生する確率は 1/32 のため2ゲームに1回ぐらいの発生率である

*2:組み合わせなどをうまく考えればパターン数を減らせそうではあるが、自分にとっての計算の分かりやすさ優先で全パターン数え上げる方式で実装した

*3:グラフ化したかったのでこのような方法を取ったのと、自分の python 力のなさによるもの。本来であればスクリプトで集計しやすいよう csv 出力などを工夫すべきかとは思う

*4:ただし、ゲームのテーブルを立てることができるのはボードゲームアリーナプレミアム会員のみ