見出し画像

[TFT] 欲しい4コストを二枚とも引くには


はじめに

パッチ13.4, 13.5では,スクラップがトップメタの一角を担うようになりました.
スクラップは条件なしに負け進行からいける貴重な4コスト構成である一方,競合しやすいという点があります.
そんな時は,競合より一足先に8レベルに挙げて先にエコーとコーキを引きたいところですが,私は何ゴールドあればオールインしてよいのか,いまいちわかっていませんでした.

そこで,競合した際に欲しい4コスト2体を1枚ずつ引くには,おおよそ何ゴールド必要なのかを調べてみました.
結論から言うと,8レベに上げた時に,40~42ゴールドあれば,概ね引けることがわかりました.


検証方法

確率から求めるのが,最も正確だと思ったのですが,複雑で自分では理解できなかったので,プログラムでシミュレーションしてみることにしました.
条件を以下のように仮定して,検証しました.

  • 全ての4コストがショップに残っている.

  • コーキとエコーを1枚ずつ引くまでリロールし続ける

  • 他の4コストは購入しない

  • コーキとエコーがそろうまではコーキとエコーは買い続ける

最後の条件は例えば,コーキを1枚,エコーを0枚持っているときに,コーキが来た場合はもう一枚コーキを買うということです.実践でも重なるまでは買うと思うので,このようにしました.

プログラムは以下のようになります.C++で書きました.プログラムは決して上手じゃないので興味がある人以外は結果まで飛ばしちゃってください.多分上手な人ならもっとスマートに書けると思います!

#include <bits/stdc++.h>
using namespace std;

int roop = 200000;

int main(){
    random_device random;
    mt19937 generater(random());
    uniform_int_distribution<> distri_cost(1, 100);
    uniform_int_distribution<> distri_unit(1, 120);
    vector<bool> even_table(120);
    double result = 0;

    for(int i=0;i<roop;i++){//試行回数

        for(int i=0;i<120;i++) even_table[i] = true;
        bool corki=false,ekko=false;
        int count = 0;

        while(1){//リロール回数
            count++;
            for(int j=0;j<5;j++){//一回のショップ

                int cost_check = distri_cost(generater);

                if(cost_check <= 22){//22%引いたら4コスの抽選
                    int unit_check;
                    while(1){
                        unit_check = distri_unit(generater);
                        if(even_table[unit_check]) break;//既に引いていたらやり直し
                    }
                    if(unit_check <= 10){//コーキ
                        corki = true;
                        even_table[unit_check] = false;
                    }else if(unit_check <= 20){//エコー
                        ekko = true;
                        even_table[unit_check] = false;
                    }   
                }

            }
            if(corki && ekko){
                result += count;
                break;
            }
        }
    }

    cout << (result / roop) << endl;

    return 0;
}

1~100の乱数で22以下を引いた時を4コストが抽選されたとして,1~120(全4コストの枚数)の乱数を生成します.そのうち1~10をコーキ,11~20をエコーとして,カウントします.カウントされた数字は,以降乱数で出た場合はやり直します(購入されたショップから出なくなっているため).コーキとエコーが出たら,それまでのリロール回数を保存し,これを20万回繰り返して,その平均を結果としています.

結果

三回実行して、それぞれ

  • 16.4876

  • 16.5145

  • 16.4917

となったので,20万回でおおよそ収束していて,そのリロール回数は16.5回とわかりました.
16.5(このリロール回数)×2+8(4コスト2枚にかかるお金) = 41
従って,コーキとエコーを引くのにおおよそ41円となります.実際はリロール回数が16回か17回になるので40~42円になります.

おわりに

8レベルで狙った4コスト2体を引くにはおおよそ40~42ゴールド必要と分かりました.

もちろん実際には駒が買われていたり,他の人のショップに並んでいたりするので,状況次第で変化するので確実とは言えませんが,今後競合がいて,8レベルに上げるか迷ったら,上げた時に40~42ゴールド残るかを参考の一つにしてみるのは良いと思います.

今回はエコーとコーキで話しましたが,他の4コス2枚(イラオイとゾーイ,アンベッサとガレンなど)についても同じことが言えるので,よかったら参考にしてみてください.

ここまで読んでいただきありがとうございました!
ご意見,ご指摘等ありましたらお気軽にご連絡ください

おまけ

7レベルの場合でも検証してみました(最初の乱数の条件を22から10に変更しただけ).結果は

  • 35.8402

  • 35.6997

  • 35.7902

となり,おおよそ35.7回リロールしないといけません.つまり,8レベルの時と比べて,約40ゴールド余計にリロールしないといけないので,3コス3スターを狙いながら等でない限りは,現在の仕様で7レベルオールインはコスパが悪いと思います.

いいなと思ったら応援しよう!