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

1편에 이어서....

 

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

 

 

스펙트럼 작전의 위기협약 헤드헌팅에서는 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회 가챠를 시도한다.

 

TAGS.

Comments