0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ドルフロのイベントを考察する

Last updated at Posted at 2019-09-20

#これは何?
今ドルフロで「ビンゴシステム」というイベントが開かれています。

ルーに関してはざっとこんな感じ
①特定任務達成でカードが1枚もらえる
②カードには1~36のランダムな数字が書かれている
③そのカードの数字のマスを開けることができる
④すでにあけてあるマスの数字がもう一度当たった場合は何も起こらない1

重複がなければ36枚でコンプリートですが、たいていは重複があるので更なる枚数が必要です。
ということで、コンプリートするまでの枚数の期待値を調べることにしました。

#方法①:大量にシュミレーションする

import random
cell_num=36
result={}
for i in range(1,cell_num+1):#初期化
    result[i]=[]

def Run():
    already=[]
    counter=0
    while True:
        counter+=1
        r=random.randrange(1,cell_num+1)
        if r not in already:
            already.append(r)
            result[len(already)].append(counter)
            if len(already)==cell_num:#この時点で全部埋まってたら
                break

size=1000
for i in range(size):#1000回やって平均をとる
    Run()
    
for i,counts in result.items():
    print(i,sum(result[i])/size)

##結果

1 1.0  ←1マス目は絶対1回で開く
2 2.033 ←2マス開けるのに必要なカードの期待値
3 3.081 ←3マス開けるのに(ry
4 4.151
5 5.292
6 6.447
7 7.633
8 8.875
9 10.164
10 11.478
11 12.884
12 14.307
13 15.803
14 17.313
15 18.956
16 20.588
17 22.441
18 24.258
19 26.198
20 28.314
21 30.593
22 32.975
23 35.489
24 38.422
25 41.437
26 44.626
27 48.263
28 52.451
29 56.993
30 62.149
31 68.149
32 75.408
33 83.906
34 96.066
35 114.263
36 150.705

#方法②:確率の計算をする
例えば、36マス中20マスが埋まっている状態を考えると、
1回で開く確率は(16/36)
2回目で開く確率は、(20/36)×(16/36)←1回目に重複する確率×2回目に当たる確率
3回目で開く確率は、(20/36)×(20/36)×(16/36)

といった感じで計算して、それらの確率×回数 の平均が期待値となります。

import random
cell_num=36

def Solve(num):
    if num==1:
        return 1.0
    else:
        out=0
        all_fail_prob=1
        i=1
        while(True):
            out+=all_fail_prob*(1-(num-1)/cell_num)*i
            all_fail_prob*=(num-1)/cell_num
            i+=1
            if all_fail_prob<0.0001:#確率が0.01%をした回った時点で終了
                return out

        
start=time.time()
count=0
for i in range(1,37):
    count+=Solve(i)
    print(i,count)



##結果

1 1.0          ←1マス目は1回で開く
2 2.0284850823045266  ←2マス開けるのに必要なカードの枚数の期待値
3 3.0872604214296597  ←3マス開けるのに(ry
4 4.1779240016765735
5 5.3028202742637465
6 6.463792170353223
7 7.663637849365569
8 8.904625783402167
9 10.190118329977318
10 11.522943037008568
11 12.90722576477284
12 14.346508476931167
13 15.8459750216652
14 17.410756336838382
15 19.046199369676764
16 20.759649541919302
17 22.558829777868826
18 24.452701778909887
19 26.451725216409887
20 28.56819680788394
21 30.81669400234482
22 33.21544623832343
23 35.78501202648405
24 38.55229318830238
25 41.5499764638119
26 44.82046996685763
27 48.41787176930729
28 52.41508421449354
29 56.91128492201391
30 62.04973003709878
31 68.04451050819073
32 75.23799758337739
33 84.22999125499628
34 96.21834209653234
35 114.20120836563238
36 150.16496409399065

#まとめ
36マス全部開けるのに150枚もいるのかよ!! みたいな
ガチャガチャ全種類集めるには・・みたいな計算に応用できるかもしれません。

  1. 確定解読に関しては今回は触れません

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?