🦔

最速サナの確率は?2進化ポケモンを出すまでのターン数の平均を調べてみました

2024/12/17に公開

はじめに

2進化ポケモンのデッキは安定しないといわれたりしますが実際のところ必要なターン数はどれほどでしょうか?
今回10万回のシミレーションを行うプログラムを組んで検証してみました

検証

Pythonによるコードは以下になります
なお簡単のため以下のルールでシミュレーションを行っています

  • モンスターボール、博士の研究が手札にある時は常にモンスターボール、博士の研究の順序で使用する
  • たねポケモンが手札にある時は常にすべて場に出す
  • 進化できるときは常に進化する
  • 相手のレッドカードを考慮しない
import random

def simulate(basic_num):
  deck = ['research']*2 + ['ball']*2 + ['ralts']*2 + ['kirlia']*2 + ['gardevoir']*2 + ['basic']*basic_num
  deck += ['dummy']*(20-len(deck))

  # たねポケモンが1体以上含まれるまで初期手札を生成
  while True:
    random.shuffle(deck)
    hand = deck[:5]
    basics_in_hand = list(filter(lambda c: c in ["ralts", 'basic'], hand))
    if len(basics_in_hand):
      break
  deck = deck[5:]

  # 0ターン目のたねポケモンのセットは簡単のため省略
  field = []

  for turn in range(1, 100):
    if len(deck):
      hand.append(deck.pop(0))
    # モンスターボール使用
    for i in range(hand.count('ball')):
      hand.remove('ball')
      basics_in_deck = list(filter(lambda c: c in ["ralts", 'basic'], deck))
      if(len(basics_in_deck)):
        basic = basics_in_deck[0]
        deck.remove(basic)
        hand.append(basic)

    # 博士の研究使用
    if 'research' in hand:
      hand.remove('research')
      for i in range(min(len(deck), 2)):
        hand.append(deck.pop(0))

    # 進化処理
    evolutions = []
    for candidate in hand:
        if candidate == 'kirlia' and 'ralts' in field:
            field.remove('ralts')
            evolutions.append('kirlia')
        if candidate == 'gardevoir' and 'kirlia' in field:
            field.remove('kirlia')
            evolutions.append('gardevoir')
    for c in evolutions:
        hand.remove(c)
    field += evolutions

    # たねポケモンを出す
    # 進化のあとに置くことで初ターン進化を除く
    basics_in_hand = list(filter(lambda c: c in ["ralts", 'basic'], hand))
    field += basics_in_hand
    for basic in basics_in_hand:
      hand.remove(basic)

    if 'gardevoir' in field:
      return turn

SIMULATE_NUM = 100000
for basic_num in [2,3,4]:
  turns = [simulate(basic_num) for i in range(SIMULATE_NUM)]
  count = { i: 0  for i in range(1,100)}
  for turn in turns:
    count[turn] += 1
  result = {key: value / SIMULATE_NUM for key, value in count.items()}
  sum = 0
  print(f'追加のたねポケモンが{basic_num}体の場合')
  for key, value in result.items():
    sum += value
    print(f'{key}ターン目で揃う確率: {round(value*100, 2)}%(累計: {round(sum*100, 2)}%)')
    if key == 10:
      break
  print("---")

今回2進化ライン以外のたねポケモンの数を変えてシミレーションを行っています
例えばミューツーデッキで定番の構成ではミューツーex2枚とミューツー1枚の合計である3枚がその数に対応します

このコードの実行結果を表にまとめたものがこちらです

たね2枚 たね3枚 たね4枚
1ターン以内に完成 0.0% 0.0% 0.0%
2ターン以内に完成 0.0% 0.0% 0.0%
3ターン以内に完成 40.35% 38.34% 37.02%
4ターン以内に完成 54.56% 52.83% 51.63%
5ターン以内に完成 67.24% 65.85% 64.8%
6ターン以内に完成 78.36% 77.35% 76.41%
7ターン以内に完成 87.45% 86.74% 86.05%
8ターン以内に完成 94.02% 93.66% 93.23%
9ターン以内に完成 97.91% 97.74% 97.55%

まとめ

定番のミューツーデッキにおける最速サナの確率はおよそ38%という結果になりました!
思っていたより高いと感じる人のほうが多いのではないでしょうか?

Discussion