無機野

ここはお前の日記帳

熾天使をマリガン時デッキ戻しした場合にその後引く確率

タイトル通り
エイラと違って8Tまで持ってても仕方ないので基本戻す

import random as rd
import matplotlib.pyplot as plt
import collections as col

target = 3 #セラフ
others = 40 - target
m = 2 #マリガン枚数
time = 1000000 #試行回数

def mulligan():
    """熾天使をマリガンで戻した場合、何ターンまでに引いてるか。todo キャントリやプリプリの考慮"""
    x = [] #ターゲットが来たターンから成るリスト。0は初手orマリガンで来た場合、それ以外は来たターン。後攻は-1ターンして考える
    for j in range(time):
        deck = []
        hand = []     
        for i in range(target):
            deck.append("t")
        for i in range(others):
            deck.append("o")
        rd.shuffle(deck) #デッキ作成&まぜまぜ完了 
        for i in range(3):
            hand.append(deck.pop()) #マリガン前初手引き
        tnum = col.Counter(hand)
        for i in range(tnum["t"]): #初手熾天使あるならdeckに戻して
            hand.remove("t")
            deck.append("t")
        rd.shuffle(deck)
        for i in range(tnum["t"]):
            hand.append(deck.pop()) #戻した数だけカード引く
        if "t" in hand:
            x.append(0) #初手熾天使が有って、それマリガンで戻してもまた来た場合
            continue  
        for i in range(37): #マリガンしてターゲットが無い場合
            if deck.pop() == "t":
                x.append(i+1)
                break
        
    plt.hist(x,bins=max(x))
    aaa = col.Counter(x)

    totalprb = 0
    for i in range(16):
        prb = (aaa[i]/time)*100
        totalprb += prb
        print(i,"ターン目までにターゲットを引いている確率",totalprb,"%")

mulligan()
print("マリガン",m,"枚")
print(time,"回試行")

0 ターン目までにターゲットを引いている確率 1.7543 %
1 ターン目までにターゲットを引いている確率 9.7392 %
2 ターン目までにターゲットを引いている確率 17.2676 %
3 ターン目までにターゲットを引いている確率 24.321400000000004 %
4 ターン目までにターゲットを引いている確率 31.010200000000005 %
5 ターン目までにターゲットを引いている確率 37.276900000000005 %
6 ターン目までにターゲットを引いている確率 43.1884 %
7 ターン目までにターゲットを引いている確率 48.6363 %
8 ターン目までにターゲットを引いている確率 53.756099999999996 %
9 ターン目までにターゲットを引いている確率 58.5391 %
10 ターン目までにターゲットを引いている確率 62.986799999999995 %
11 ターン目までにターゲットを引いている確率 67.0842 %
12 ターン目までにターゲットを引いている確率 70.90419999999999 %
13 ターン目までにターゲットを引いている確率 74.40259999999999 %
14 ターン目までにターゲットを引いている確率 77.6117 %
15 ターン目までにターゲットを引いている確率 80.5283 %
マリガン 2 枚 熾天使3枚
1000000 回試行
f:id:moppii:20161206164107p:plain

0 ターン目までにターゲットを引いている確率 0.7992000000000001 %
1 ターン目までにターゲットを引いている確率 6.1516 %
2 ターン目までにターゲットを引いている確率 11.3437 %
3 ターン目までにターゲットを引いている確率 16.4056 %
4 ターン目までにターゲットを引いている確率 21.298000000000002 %
5 ターン目までにターゲットを引いている確率 26.0973 %
6 ターン目までにターゲットを引いている確率 30.713900000000002 %
7 ターン目までにターゲットを引いている確率 35.1751 %
8 ターン目までにターゲットを引いている確率 39.5017 %
9 ターン目までにターゲットを引いている確率 43.6909 %
10 ターン目までにターゲットを引いている確率 47.727599999999995 %
11 ターン目までにターゲットを引いている確率 51.61619999999999 %
12 ターン目までにターゲットを引いている確率 55.34459999999999 %
13 ターン目までにターゲットを引いている確率 58.85809999999999 %
14 ターン目までにターゲットを引いている確率 62.27709999999999 %
15 ターン目までにターゲットを引いている確率 65.5645 %
マリガン 2 枚 熾天使2枚
1000000 回試行
f:id:moppii:20161206164440p:plain

実際はキャントリ持ちやプリプリがあるのでもうちょっと早くなる
キャントリについては積んでる枚数多いだろうしターンを読み替えるだけで近似できそうな気はするけどプリプリの影響はでかいのでそういうのも考えないといけない、そのうちやる