幻想蛮怒のカードガチャで黒字になる確率とか知りたかった

ので調べてみた
超幸運かつインフレ度600で6割くらい黒字になるらしい
期待値770000弱で中央値は410000弱とかいう上振れつよつよゲーミングでした
良かったですね
種銭貯め期間中に下振れ引いた時の終わりオブザデッド感がヤバいが、真面目に稼ぐよりリセマラして上振れ狙ったほうが速いと思う

検証に使ったコードは以下
たぶん合ってるはず(1/27 微妙に間違えてたところを修正)

from random import *
from statistics import *

#カードのレア度を返す
def gacha():
    if randint(1,5)!=1:
        return 1
    elif randint(1,5)!=1:
        return 2
    elif randint(1,5)!=1:
        return 3
    else:
        return 4

#wierdluckを通るかの判定を返す 0=何もなし 1=白オーラxor絶好調 2=白オーラand絶好調
def weirdluck(x):
    if x==0:
        return randint(1,12)==1
    if x==1:
        return randint(1,9)==1
    if x==2:
        return randint(1,7)==1

#幸運判定用ナンバーを受け取って1箱剥いて出たカードのレア度のリストを返す
def gacha_tentime(luck):
    tmp=0
    a=[]
    while tmp<10:
        x=gacha()
        if weirdluck(luck):
            x+=1
        if x==5:
            x=4
            tmp-=1
        a.append(x)
        tmp+=1
    return a

#レア度のリストとインフレ率を受け取ってを値段の合計に変換して返す
def result_to_price(result,price_rate):
    price_sum=0
    TRADE_VALUE_LIST=[[11,10,22,20,14,13,12,18,16,15,17,17,17,19],
                [37,45,30,48,27,25,28,42,34,36,44,35,43,41,40,50,46,32,30,47,33,26,31,38,30,33,48,49,29],
                [64,70,67,85,72,87,93,90,100,75,82,80,95,60,77,80,88,65,63,62,73,90,68,65,74,83,84,77],
                [150,140,135,130,120,110,115,125,145,118,128,112,123,143,147,160]]
    for i in result:
        card_price=(choice(TRADE_VALUE_LIST[i-1])*price_rate+300)
        if i==2:
            card_price*=3
        if i==3:
            card_price*=10
        if i==4:
            card_price*=30


        price_sum+=card_price
    return price_sum


#1箱剥いて値段を返す
def calc_box_price(luck,price_rate):
    box=gacha_tentime(luck)
    price=result_to_price(box,price_rate)
    return price

#剥く箱の数、幸運判定用ナンバー、インフレ率を入れて、平均価格、中央値、全売却で黒字になる確率をprintする
def calc_statistics(num,luck,price_rate):
    priceList=list(sorted([calc_box_price(luck,price_rate) for i in range(num)]))
    gacha_average=mean(priceList)
    gachaMedian=median(priceList)
    inBlackPercent=len(list(filter(lambda x:x>300000,priceList)))/num
    print("平均値="+str(gacha_average)+"\n中央値="+str(gachaMedian)+"\n黒字率="+str(inBlackPercent)+"\n")

#適当に数字いじって遊ぶ
calc_statistics(100000,2,600)


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