원신 5성 캐릭터 풀돌이 4성 캐릭터 풀돌보다 빠를 수 있을까?

 

5.6버전 5성 캐릭터 에스코피에와 4성 캐릭터 이파 출시

 

 

 

어떤 사람이 이 가챠를 돌리는데, 4성 캐릭터 이파를 풀돌하고 싶다.

 

그런데, 그 전에 5성 캐릭터 에스코피에를 먼저 풀돌할 수 있을까?

 

------------------------------------------------------------------------------------------------------------------------------------------------------------

 

원신 가챠의 규칙을 알아보자

 

1) 5성 캐릭터의 획득 확률은 0.6%

 

2) 4성 캐릭터의 획득 확률은 5.1%

 

3) 5성 캐릭터는 최대 90회 이내에 무조건 얻을 수 있다. 

 

즉, 0~89회 동안 5성 캐릭터가 나오지 않았다면 90회째에는 반드시 5성 캐릭터를 획득한다.

 

만약 어느 시점에 5성 캐릭터를 획득한다면, 이 카운트는 0회부터 다시 시작한다.

 

즉, 70회째 5성 캐릭터를 획득한다면, 다시 0회부터 시작해서 카운트를 센다.

 

4) 4성 캐릭터는 최대 10회 이내에 무조건 얻을 수 있다.

 

즉, 0~9회 동안 4성 캐릭터가 나오지 않았다면 10회째에는 반드시 4성 캐릭터를 획득한다.

 

만약 어느 시점에 4성 캐릭터를 획득한다면, 이 카운트는 0회부터 다시 시작한다.

 

즉, 5회째 4성 캐릭터를 획득한다면, 다시 0회부터 시작해서 카운트를 센다.

 

5) 기원에는 픽뚫 캐릭터가 존재한다.

 

5성 캐릭터를 획득했다면, 절반의 확률로 에스코피에가 아닌 다른 5성 캐릭터를 획득한다.

 

4성 캐릭터를 획득했다면, 절반의 확률로 이파, 올로룬, 레일라가 아닌 다른 4성 캐릭터,무기를 획득한다.

 

6) 픽뚫 캐릭터를 획득했다면, 그 다음에는 무조건 픽업 캐릭터를 획득한다.

 

에스코피에가 아닌 다른 5성 캐릭터를 획득했다면, 그 다음에 5성 캐릭터를 획득할때는 반드시 에스코피에를 획득한다.

 

이파,올로룬,레일라가 아닌 다른 4성 캐릭터,무기를 획득했다면, 그 다음에 4성 캐릭터를 획득할때는 반드시 이파를 획득한다.

 

7) 확률 보정이 존재한다.

 

5성 캐릭터는 0~73회에는 0.6%확률, 74회부터는 1회 증가할때마다 확률이 6%p 증가한다.

 

즉, 74회에는 6.6%, 75회에는 12.6%, .... 89회는 96.6%, 90회에는 100%

 

4성 캐릭터는 0~8회에는 5.1%, 9회에는 56.1%, 10회째에는 반드시 4성 이상의 캐릭터를 획득한다.

 

8) 5성 캐릭터의 특별한 규칙이 존재한다.

 

5성 캐릭터를 획득할때, 에스코피에가 아닌 다른 5성 캐릭터를 획득하는 경우, 0.018% 확률로 에스코피에를 획득하게 해준다.

 

이 확률은 횟수에 따라 증가하는 것으로 알려져있으나 정확한 수치가 공개되어있지 않다.

 

에스코피에가 아닌 다른 5성 캐릭터를 획득하는 횟수가 3회이면, 다음에는 반드시 에스코피에를 획득한다.

 

즉, (상시 캐릭터) - 에스코피에 - (상시캐릭터) - 에스코피에 - (상시캐릭터) - 에스코피에를 얻었을 경우, 

 

그 다음 5성 캐릭터를 획득할때는 반드시 에스코피에를 획득한다.

 

만약 픽업 5성 캐릭터를 획득한다면, 이 횟수는 다시 초기화된다.

 

즉, (상시캐릭터) - 에스코피에 - 에스코피에를 획득한다면, 다시 0회부터 카운트한다.

 

아무튼 이 규칙을 포함한다면, 반천장 획득 확률이 55%에 수렴한다고 한다

 

 

import random
from tqdm.notebook import tqdm

def draw(total_count,temp_count,no_pick_five,no_pick_four):
    
    x = random.uniform(0,1)

    p1 = 0
    p2 = 0

    if total_count >= 74 and total_count <= 89:
        
        p1 = (total_count-73)*0.06
    
    elif total_count == 90:
        
        if no_pick_five:
            
            return 0
        
        else:
        
            y = random.uniform(0,1)

            if y <= 0.55:

                return 0
            
            else:

                return 1
    
    if temp_count <= 9:
        
        if temp_count == 9:

            p2 = 0.51

        if x <= 0.006+p1:
            
            if no_pick_five:
                
                return 0
            
            else:

                y = random.uniform(0,1)

                if y <= 0.55:

                    return 0
                
                else:
                    
                    return 1

        elif x <= 0.057+p1+p2:
            
            if no_pick_four:
                
                y = random.uniform(0,1)

                if y <= 1/3:

                    return 2
                
                elif y <= 2/3:
                    
                    return 3
                
                else:
                    
                    return 4
            
            else:

                y = random.uniform(0,1)

                if y <= 0.5:
                    
                    z = random.uniform(0,1)

                    if z <= 1/3:

                        return 2
                    
                    elif z <= 2/3:
                        
                        return 3
                    
                    else:
                        
                        return 4
                
                else:
                    
                    return 5

        else:
            
            return 6
    
    else:
        
        if x <= 0.006+p1:
            
            if no_pick_five:
                
                return 0
            
            else:

                y = random.uniform(0,1)

                if y <= 0.55:

                    return 0
                
                else:
                    
                    return 1
        
        else:
            
            if no_pick_four:
                
                y = random.uniform(0,1)

                if y <= 1/3:

                    return 2
                
                elif y <= 2/3:
                    
                    return 3
                
                else:
                    
                    return 4
            
            else:

                y = random.uniform(0,1)

                if y <= 0.5:
                    
                    z = random.uniform(0,1)

                    if z <= 1/3:

                        return 2
                    
                    elif z <= 2/3:
                        
                        return 3
                    
                    else:
                        
                        return 4
                
                else:
                    
                    return 5

n = 1000000

five_win = 0
four_win = 0

for _ in tqdm(range(n)):
    
    count_five = 0
    count_four = 0

    total_count = 0
    temp_count = 0
    no_pick_five = False
    no_pick_four = False

    while 1:
        
        total_count += 1
        temp_count += 1
        
        x = draw(total_count,temp_count,no_pick_five,no_pick_four)

        if x == 0:

            count_five += 1
            total_count = 0
            temp_count = 0
            no_pick_five = False
        
        elif x == 1:

            no_pick_five = True
            total_count = 0
            temp_count = 0

        elif x == 2:

            count_four += 1
            temp_count = 0
            no_pick_four = False

        elif x == 3:

            temp_count = 0
            no_pick_four = False

        elif x == 4:

            temp_count = 0
            no_pick_four = False
        
        elif x == 5:
            
            no_pick_four = True
            temp_count = 0

        if count_five == 7 or count_four == 7:
            
            break
    
    if count_five == 7:

        five_win += 1

    elif count_four == 7:

        four_win += 1
         
print(five_win,four_win)

 

 

별빛포착 확률은 알 수 없으니 대충 반천장 확률이 55%에 수렴한다고 치고

 

그러면 100만명 중에 5500명이 에스코피에 풀돌을 더 먼저한다

 

맞게 구현한건지 모르겠네

 

생각보다 많은듯

 

 

728x90