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명이 에스코피에 풀돌을 더 먼저한다
맞게 구현한건지 모르겠네
생각보다 많은듯

'읽을거리' 카테고리의 다른 글
| 카카오 테크 예시로 배우는 코드 프롬프팅 읽어보기 (0) | 2025.05.31 |
|---|---|
| 바이브 코딩(vive coding), AI 에이전트, "프롬프트어" (0) | 2025.05.24 |
| 원신 별빛포착에 대한 확률 의문을 최초로 제기했던 중국인의 정리 (1) | 2025.03.12 |
| 사과게임(레몬게임) 파이썬으로 고득점 받기 (0) | 2025.02.28 |
| 알고 있으면 좋을지도 모를 오픈소스 모음(2025/05/24) (0) | 2025.02.27 |