import random


# 시뮬레이션 설정 (수정하기 쉽게 변수 설정)
num_simulations = 1000    # m번 시뮬레이션 횟수

# 각 등급별 캐릭터 목록 (픽업 SSR 캐릭터는 없음)
characters = {
    "SSR_Pilgrim": [
        "하란", "스노우 화이트", "노아", "홍련", "이사벨", 
        "라푼젤", "모더니아", "도로시", "레드후드", "홍련 : 흑영", "크라운"
    ],
     #위시리스트 가정하에 임의로 15명 배정
    "SSR_General": [
        "맥스웰", "슈가", "엑시아", "앨리스", "엠마", "유니", "프리바티", "프림", "율리아", "시그널", 
        "폴리", "미란다", "브리드", "솔린", "디젤"
    ],
    "SR": [
        "N102", "미하라", "에테르", "라피", "네온", "델타", "아니스", "벨로타", "미카"
    ],
    "R": [
        "프로덕트 08", "프로덕트 12", "프로덕트 23", "솔져 E. G.", "솔져 F. A.", "솔져 O. W.", 
        "iDoll 플라워", "iDoll 오션", "iDoll 썬"
    ]
}

# 가챠 확률 설정 (단위: %)
probabilities = {
    "SSR_Pilgrim": 0.5,   # 필그림 SSR: 0.5%
    "SSR_General": 3.5,   # 일반 SSR: 2.5%
    "SR": 43.0,           # SR 등급: 43%
    "R": 53.0             # R 등급: 53%
}

# 가챠를 실행하는 함수
def pull_gacha():
    roll = random.uniform(0, 100)
    cumulative_probability = 0

    # 확률에 따라 등급과 하위 카테고리를 결정
    for rarity, probability in probabilities.items():
        cumulative_probability += probability
        if roll < cumulative_probability:
            return rarity
    return "R"  # 기본값으로 R 등급 반환 (확률 오류 방지용)

# SSR 캐릭터 중 중복 4개 이상을 획득한 캐릭터를 추적
def simulate_gacha_until_4_or_more():
    # 중복 획득을 추적할 딕셔너리
    character_counts = {
        "SSR_Pilgrim": {char: 0 for char in characters["SSR_Pilgrim"]},
        "SSR_General": {char: 0 for char in characters["SSR_General"]}
    }

    total_pulls = 0
    num_over_4_count = 0  # 중복 4개 이상을 가진 캐릭터의 수

    # 중복 4개 이상을 가진 캐릭터가 5명 이상 될 때까지 반복
    while num_over_4_count < 5:
        total_pulls += 1
        rarity = pull_gacha()
        if rarity in ["SSR_Pilgrim", "SSR_General"]:
            # 캐릭터 이름을 랜덤하게 선택
            if rarity == "SSR_Pilgrim":
                character = random.choice(characters["SSR_Pilgrim"])
            else:
                character = random.choice(characters["SSR_General"])

            # 해당 캐릭터 획득 횟수 증가
            character_counts[rarity][character] += 1

            # 중복 획득 횟수 4개 이상인 캐릭터가 5명 이상 될 경우 종료 조건
            num_over_4_count = sum(1 for count in character_counts[rarity].values() if count >= 4)
    
    return total_pulls  # 중복 4개 이상을 가진 캐릭터가 5명 이상될 때까지 뽑은 횟수

# 여러 번의 시뮬레이션을 돌려 평균값을 계산하는 함수
def run_simulations_for_duplicates(num_simulations):
    total_pulls_needed = 0
    
    for _ in range(num_simulations):
        pulls_needed = simulate_gacha_until_4_or_more()
        total_pulls_needed += pulls_needed
    
    # 평균 계산
    avg_pulls_needed = total_pulls_needed / num_simulations
    return avg_pulls_needed

# 시뮬레이션 실행
average_pulls_needed = run_simulations_for_duplicates(num_simulations)

# 결과 출력
print(f"4개 이상 중복된 SSR 캐릭터가 5명이 될 때까지 평균 뽑기 횟수:")
print(f"필요한 뽑기 횟수: {average_pulls_needed:.1f}번")
print(f"필요한 뽑기 재화: {average_pulls_needed*300:,.0f}쥬얼")
print(f"필요한 뽑기 재화: {average_pulls_needed*300*20:,.0f}원")

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: