명일방주 픽업을 위한 평균 가챠횟수 3편(한정 헤드헌팅)

2편에 이어서...

 

 

명일방주 한정 헤드헌팅 딥드라운 라멘트에서는 6성 오퍼레이터가 36명 등장한다.

 

33명은 일반 오퍼레이터이고 나머지 2명은 스카디 더 커럽팅 하트, 켈시, 마지막 1명은 W이다.

 

기본 확률은 6성 2%, 5성 8%, 4성 50%, 3성 40%로 등장한다.

 

스카디 더 커럽팅 하트와 켈시는 6성 등장 확률의 70%인 1.4%확률로 등장한다.

 

이들이 동일한 확률로 등장한다면 0.7%, 0.7%확률로 등장한다.

 

나머지 34명은 W는 나머지 일반 오퍼레이터의 5배 확률로 등장한다.

 

일반 오퍼레이터가 33명있고 W가 5명있다고 생각하면 총 38명에 대하여 일반 오퍼레이터는 0.6/38=0.01578947% = 약 0.016%

 

W는 0.6*5/38=0.0789473685% = 약 0.079%로 등장한다.

 

1. 한정 캐릭터 스카디 더 커럽팅 하트를 얻기까지 시도한 평균 가챠 횟수는?

 

1편, 2편에서 이용한 코드에서 확률만 조정하면 된다

 

pickup_list = ['스카디 더 커럽팅 하트','켈시','W','기타 6성','5성','4성','3성']

weight_list = [0.007,0.007,3/3800,0.6*33/3800,0.08,0.50,0.40]

 

def try_skadi(pickup_list,weight_list):
    
    total_try_num = 0

    try_num = 1

    bonus=False

    while 1:

        if bonus == False:
        
            #10회 이내 보너스

            if try_num < 10:
                
                a = random.choices(pickup_list,weights=weight_list)
            
            else:
                
                a = random.choices(['스카디 더 커럽팅 하트','켈시','W','기타 6성','5성'],weights=[0.007,0.007,3/3800,0.6*33/3800,0.98])
            
            if a == ['5성'] or a == ['W'] or a == ['켈시'] or a == ['기타 6성']:
                    
                bonus = True
            
            elif a== ['스카디 더 커럽팅 하트']:

                total_try_num = total_try_num + try_num
                
                break
        
        else:

            if try_num <= 50:

                a = random.choices(pickup_list,weights=weight_list)

                if a == ["스카디 더 커럽팅 하트"]:
                    
                    total_try_num = total_try_num + try_num
                  
                    break
                
                elif a ==["W"] or a == ['켈시'] or a ==['기타 6성']:

                    total_try_num = total_try_num + try_num

                    try_num = 0
            
            else:
                
                six_prob = 0.02*(try_num-49)

                pickup_list2 = ['스카디 더 커럽팅 하트','켈시','W','기타 6성','기타']

                pickup_prob = six_prob*0.7

                nonpickup_prob = 1-pickup_prob

                a = random.choices(pickup_list2,weights=[pickup_prob/2,pickup_prob/2,nonpickup_prob*5/38,nonpickup_prob*33/38,1-six_prob])

                if a == ["스카디 더 커럽팅 하트"]:
                    
                    total_try_num = total_try_num + try_num
                  
                    break
                
                elif a ==["켈시"] or a == ['W'] or a ==['기타 6성']:

                    total_try_num = total_try_num + try_num

                    try_num = 0
        
        try_num += 1
    
    return total_try_num

 

total_man = 1000000

sum_of_try = 0

for _ in range(total_man):

    try_num = try_skadi(pickup_list,weight_list)

    sum_of_try = sum_of_try + try_num

expect = sum_of_try/total_man

print(expect)

 

141.47.... , 141.455... 한정 캐릭터 스카디 더 커럽팅 하트를 얻기 위해 평균적으로 약 141회 가챠를 시도한다.

 

2. W를 얻기까지 시도한 평균 가챠 횟수는?

 

목표를 스카디 더 커럽팅 하트에서 W로 조정하면 된다.

 

def try_W(pickup_list,weight_list):
    
    total_try_num = 0

    try_num = 1

    bonus=False

    while 1:

        if bonus == False:
        
            #10회 이내 보너스

            if try_num < 10:
                
                a = random.choices(pickup_list,weights=weight_list)
            
            else:
                
                a = random.choices(['스카디 더 커럽팅 하트','켈시','W','기타 6성','5성'],weights=[0.007,0.007,3/3800,0.6*33/3800,0.98])
            
            if a == ['5성'] or a == ['스카디 더 커럽팅 하트'] or a == ['켈시'] or a == ['기타 6성']:
                    
                bonus = True
            
            elif a== ['W']:

                total_try_num = total_try_num + try_num
                
                break
        
        else:

            if try_num <= 50:

                a = random.choices(pickup_list,weights=weight_list)

                if a == ["W"]:
                    
                    total_try_num = total_try_num + try_num
                  
                    break
                
                elif a ==["스카디 더 커럽팅 하트"] or a == ['켈시'] or a ==['기타 6성']:

                    total_try_num = total_try_num + try_num

                    try_num = 0
            
            else:
                
                six_prob = 0.02*(try_num-49)

                pickup_list2 = ['스카디 더 커럽팅 하트','켈시','W','기타 6성','기타']

                pickup_prob = six_prob*0.7

                nonpickup_prob = six_prob-pickup_prob

                a = random.choices(pickup_list2,weights=[pickup_prob/2,pickup_prob/2,nonpickup_prob*5/38,nonpickup_prob*33/38,1-six_prob])

                if a == ["W"]:
                    
                    total_try_num = total_try_num + try_num
                  
                    break
                
                elif a ==["켈시"] or a == ['스카디 더 커럽팅 하트'] or a ==['기타 6성']:

                    total_try_num = total_try_num + try_num

                    try_num = 0
        
        try_num += 1
    
    return total_try_num

 

total_man = 1000000

sum_of_try = 0

for _ in range(total_man):

    try_num = try_W(pickup_list,weight_list)

    sum_of_try = sum_of_try + try_num

expect = sum_of_try/total_man

print(expect)

 

877.3968...... 876.317..., 877.057......, W를 얻기 위해 평균적으로 약 877회 가챠를 시도한다.

TAGS.

Comments