명일방주 픽업을 위한 평균 가챠횟수 2편(위기협약)

1편에 이어서....

 

1. 위기협약 스펙트럼 작전 헤드헌팅에서 특정한 오퍼레이터를 얻는데 필요한 평균 가챠횟수는?

 

d43007c513778e44d0ac083fef18554211b406afb824924317c3d86a08e5afed.jpeg

 

스펙트럼 작전의 위기협약 헤드헌팅에서는 6성 오퍼레이터로 쏜즈, 위디, 스즈란, 나이팅게일만 등장한다.

 

기본 확률은 6성 2%, 5성 8%, 4성 50%, 3성 40%

 

6성 오퍼레이터 4명은 모두 동등한 확률로 등장한다고 가정하면 예를 들어 나이팅게일은 0.5%확률로 등장한다.

 

여기서 나이팅게일을 획득하기 위해 필요한 평균적인 가챠 횟수는?

 

pickup_list = ['쏜즈','위디','스즈란','나이팅게일','5성','4성','3성']

weight_list = [0.005,0.005,0.005,0.005,0.08,0.50,0.40]

 

def try_night(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(['쏜즈','위디','스즈란','나이팅게일','5성'],weights=[0.005,0.005,0.005,0.005,0.98])
            
            if a == ['5성'] or a == ['쏜즈'] or a == ['스즈란'] or a == ['위디']:
                    
                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 ==["위디"] or a == ['쏜즈'] or a ==['스즈란']:

                    total_try_num = total_try_num + try_num

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

                pickup_list2 = ['나이팅게일','쏜즈','스즈란','위디','기타']

                a = random.choices(pickup_list2,weights=[six_prob/4,six_prob/4,six_prob/4,six_prob/4,1-six_prob])

                if a == ["나이팅게일"]:
                    
                    total_try_num = total_try_num + try_num
                  
                    break
                
                elif a ==["위디"] or a == ['쏜즈'] or a ==['스즈란']:

                    total_try_num = total_try_num + try_num

                    try_num = 0
        
        try_num += 1
    
    return total_try_num

 

1편에서 했던 6성을 획득하기 위해 필요한 평균 가챠횟수 코드에서 약간만 수정하면 됨

 

중요한 점은 나이팅게일을 획득할때까지 가챠를 시도해야하며

 

나이팅게일 이외에 다른 6성으로 쏜즈, 스즈란, 위디를 획득하면 확률 버프가 없어져서 처음부터 다시 가챠해야한다

 

이런 점을 고려하기 위해 total_try_num과 try_num을 구분

 

total_try_num은 나이팅게일을 획득하기 위해 누적 시도한 가챠횟수이고

 

try_num은 100회 이내에 6성을 획득하기까지 시도한 가챠횟수

 

total_man = 1000000

sum_of_try = 0

for _ in range(total_man):

    try_num = try_night(pickup_list,weight_list)

    sum_of_try = sum_of_try + try_num

expect = sum_of_try/total_man

print(expect)

 

138.146..., 138.117... 평균적으로 나이팅게일을 얻기까지 약 138회 가챠를 시도한다.

 

728x90