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

3편에 이어서...

 

1. 일반 이중픽업에서 특정한 오퍼레이터를 얻기 위해 시도하는 평균적인 가챠횟수는?

 

 

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

 

이중 픽업에서 픽업 오퍼레이터는 2%의 50%확률로 등장한다.

 

아와 유넥티스가 등장할 확률은 1%로 동등하게 등장한다면 각각 0.5%확률로 등장

 

나머지 6성 오퍼레이터는 1%확률로 등장함

 

이것을 바탕으로 앞에서 사용한 코드에서 확률을 조정하면 된다.

 

pickup_list = ['유넥티스','아','기타 6성','5성','4성','3성']

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

 

def try_eunec(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(['유넥티스','아','기타 6성','5성'],weights=[0.005,0.005,0.01,0.98])
            
            if a == ['5성'] 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 ==["아"] or a ==['기타 6성']:

                    total_try_num = total_try_num + try_num

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

                pickup_list2 = ['유넥티스','아','기타 6성','기타']

                pickup_prob = six_prob*0.5

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

                if a == ["유넥티스"]:
                    
                    total_try_num = total_try_num + try_num
                  
                    break
                
                elif 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_eunec(pickup_list,weight_list)

    sum_of_try = sum_of_try + try_num

expect = sum_of_try/total_man

print(expect)

 

138.406...., 138.554...... 유넥티스를 얻기 위해 평균적으로 약 138회 가챠를 시도한다.

 

2. 일반 단독픽업에서 픽업 오퍼레이터를 얻기 위해 시도하는 평균적인 가챠횟수는?

 

 

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

 

명일방주 단독픽업에서 픽업 오퍼레이터가 등장할 확률은 2%의 50%인 1%확률로 등장한다.

 

나머지 6성 오퍼레이터는 1%확률로 등장한다.

 

앞에서 사용한 코드에서 확률만 조정하면 세일리치를 얻기 위해 필요한 평균 가챠횟수를 알 수 있다.

 

pickup_list = ['세일리치','기타 6성','5성','4성','3성']

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

 

def try_sail(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(['세일리치','기타 6성','5성'],weights=[0.01,0.01,0.98])
            
            if a == ['5성'] 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 ==['기타 6성']:

                    total_try_num = total_try_num + try_num

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

                pickup_list2 = ['세일리치','기타 6성','기타']

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

                if a == ["세일리치"]:
                    
                    total_try_num = total_try_num + try_num
                  
                    break
                
                elif 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_sail(pickup_list,weight_list)

    sum_of_try = sum_of_try + try_num

expect = sum_of_try/total_man

print(expect)

 

69.029, 69.034...., 69.056.... 세일리치를 얻기 위해 평균적으로 약 69회 가챠를 시도한다.

 

 

TAGS.

Comments