import random

# 시뮬레이션 설정
num_simulations = 1000  # 각 시뮬레이션당 가챠 횟수
num_repeats = 5000  # 시뮬레이션 반복 횟수

# 가챠 확률 설정
probabilities = {
    "legendary": 0.02,   # 전설 캐릭터 확률
    "hero": 0.20,        # 영웅 캐릭터 확률
    "rare": 0.40,        # 희귀 캐릭터 확률
    "common": 0.38       # 일반 캐릭터 확률
}

# 전설 캐릭터 리스트
legendary_characters = ["베이라", "구즈만", "사만다", "미구엘", "자비에르", 
                        "파칼", "마이타", "콜", "디탈리오", "라비에", 
                        "릴리윌", "글로리아", "타이던", "노노윌", "레오니드", 
                        "이치", "네르갈", "눈갈", "이난나", "가르시아", 
                        "매그너스", "에다", "모모", "알렉세이", "시모나", 
                        "코코아"]

# 픽업 캐릭터 설정
pickup_character = "코코아"

# 확정 획득 카운터 설정
first_meeting_counter = 180
overall_counter = 100  # 초기화 추가

def pull():
    """가챠 한 번을 실행하는 함수"""
    global first_meeting_counter, overall_counter
    global first_meeting_pity_count, overall_pity_count

    first_meeting_pity_count = 0  # 첫 만남 천장 발동 횟수 초기화
    overall_pity_count = 0  # 전체 천장 발동 횟수 초기화

    first_meeting_counter -= 1  # 픽업 캐릭터 확정 카운터 감소
    overall_counter -= 1
    
    # 첫 만남 확정 획득 카운터가 0일 경우
    if first_meeting_counter == 0:
        first_meeting_counter = 180  # 첫 만남 카운터 초기화
        overall_counter = 100  # 전체 카운터 초기화
        first_meeting_pity_count += 1  # 첫 만남 천장 발동 카운터 증가
        return "pickup"  # 픽업 캐릭터 확정 획득

    # 전체 확정 획득 카운터가 0일 경우
    if overall_counter == 0:
        character = random.choice(legendary_characters)
        if character == pickup_character:
            first_meeting_counter = 180  # 첫 만남 카운터 초기화
            first_meeting_pity_count += 1  # 첫 만남 천장 발동 카운터 증가
            return "pickup"
        overall_counter = 100  # 전체 카운터 초기화
        overall_pity_count += 1  # 전체 천장 발동 카운터 증가
        return "legendary"  # 전설 캐릭터 확정 획득

    # 무작위 확률로 캐릭터 등급 결정
    random_value = random.random()
    
    if random_value < probabilities["legendary"]:  # 전설 캐릭터 획득
        overall_counter = 100  # 전체 확정 획득 카운터 초기화
        
        # 전설 캐릭터 중 픽업 여부 결정
        if random.choice(legendary_characters) == pickup_character:
            first_meeting_counter = 180  # 첫 만남 카운터 초기화
            return "pickup"
        else:
            return "legendary"
            
    elif random_value < probabilities["legendary"] + probabilities["hero"]:  # 영웅 캐릭터 획득
        return "hero"
        
    elif random_value < probabilities["legendary"] + probabilities["hero"] + probabilities["rare"]:  # 희귀 캐릭터 획득
        return "rare"
        
    else:  # 일반 캐릭터 획득
        return "common"
        
def simulate():
    """하나의 시뮬레이션 실행 후 결과를 반환"""
    global first_meeting_counter, overall_counter
    global first_meeting_pity_count, overall_pity_count
    
    first_meeting_counter = 180
    overall_counter = 100
    
    pickup_count = 0
    legendary_count = 0
    total_first_meeting_pity = 0  # 첫 만남 천장 발동 횟수 초기화
    total_overall_pity = 0  # 전체 천장 발동 횟수 초기화

    for _ in range(num_simulations):
        result = pull()
        if result == "pickup":
            pickup_count += 1
        elif result == "legendary":
            legendary_count += 1

        total_first_meeting_pity += first_meeting_pity_count  # 첫 만남 천장 발동 횟수 추가
        total_overall_pity += overall_pity_count  # 전체 천장 발동 횟수 추가

    return pickup_count, legendary_count, total_first_meeting_pity, total_overall_pity

# 반복 시뮬레이션 실행 및 평균 계산
total_pickup = 0
total_legendary = 0
total_first_meeting_pity = 0
total_overall_pity = 0

for _ in range(num_repeats):
    pickup, legendary, first_meeting_pity, overall_pity = simulate()
    total_pickup += pickup
    total_legendary += legendary
    total_first_meeting_pity += first_meeting_pity
    total_overall_pity += overall_pity

average_pickup = total_pickup / num_repeats
average_legendary = total_legendary / num_repeats
average_first_meeting_pity = total_first_meeting_pity / num_repeats
average_overall_pity = total_overall_pity / num_repeats

# 결과 출력
print(f"총 {num_repeats}회 반복 시뮬레이션 결과:")
print(f"시뮬레이션 당 {num_simulations}회 뽑기 진행")
print()
print(f"픽업 캐릭터 '{pickup_character}' 평균 획득 횟수: {average_pickup:.2f}")
print(f"그 외 전설 캐릭터 평균 획득 횟수: {average_legendary:.2f}")
print()
print(f"첫 만남 천장 발동 평균 횟수: {average_first_meeting_pity:.2f}")
print(f"전체 천장 발동 평균 횟수: {average_overall_pity:.2f}")

Embed on website

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