mycode/just_code/lotto_sim.py
2025-05-12 22:17:12 +09:00

102 lines
3.4 KiB
Python

import sys
import os
import random
import time
from datetime import datetime
def clear_screen():
print("\033[H\033[J", end="")
def update_display(seed, num_tickets, num_simulations, current_sim, rank_list, combination_result):
clear_screen()
print(f"입력 시드: {seed}")
print(f"구매 티켓 수: {num_tickets}")
print(f"시뮬레이션 횟수: {num_simulations}")
print(f"시뮬레이션 진행 중 {current_sim}/{num_simulations}...")
print(f"현재 생성된 조합목록: {combination_result}")
print("\n" + "-" * 30)
print(f"1등: {rank_list[0]:5d} | 2등: {rank_list[1]:5d}")
print(f"3등: {rank_list[2]:5d} | 4등: {rank_list[3]:5d}")
print(f"낙첨: {rank_list[4]:5d}")
print(f"시도횟수: {sum(rank_list):5d}")
print("-" * 30)
def generate_lotto_numbers(seed):
random.seed(seed)
return sorted(random.sample(range(1, 46), 6))
def compare_numbers(winning_numbers, my_numbers):
matches = len(set(winning_numbers) & set(my_numbers))
if matches == 6:
return 0
elif matches == 5:
return 1
elif matches == 4:
return 2
elif matches == 3:
return 3
else:
return 4
def generate_complex_seed(seed):
current_time = int(time.time() * 1000000)
mixed_bits = ((current_time & 0xff000000) >> 24) + \
((current_time & 0x00ff0000) >> 8) + \
((current_time & 0x0000ff00) << 8) + \
((current_time & 0x000000ff) << 24)
extra_random = random.randint(0, seed)
final_seed = mixed_bits ^ extra_random
return final_seed
def main(seed, num_tickets, num_simulations):
rank_result = []
combination_result = []
for i in range(num_simulations):
flag = True
itr = 0
rank_list = [0,0,0,0,0]
while flag :
seed = generate_complex_seed(seed)
goal = generate_lotto_numbers(seed)
for j in range(num_tickets):
seed = generate_complex_seed(seed)
combination = generate_lotto_numbers(seed)
rank = compare_numbers(goal, combination)
rank_list[rank] += 1
itr += 1
if rank == 0 :
flag = False
if itr % 191 == 0:
update_display(seed, num_tickets, num_simulations, i+1, rank_list, combination_result)
rank_result.append(rank_list)
combination_result.append(goal)
now = datetime.now()
filename = now.strftime('result_%y%m%d_%H%M%S.txt')
with open(filename, 'w') as f:
for i, (rank, combination) in enumerate(zip(rank_result, combination_result), 1):
total_attempts = sum(rank)
f.write(f"{i}회째 결과 총 {total_attempts}번 시도\n")
f.write(f"1등 : {rank[0]} 2등 : {rank[1]} 3등 : {rank[2]} 4등 : {rank[3]} 낙첨 : {rank[4]}\n\n")
f.write("최종 조합\n")
for combination in combination_result:
f.write(' '.join(map(str, combination)) + '\n')
print(f"결과가 '{filename}' 파일에 저장되었습니다.")
if __name__ == "__main__":
if len(sys.argv) != 4:
print("사용법: python script.py <시드> <구매_티켓_수> <시뮬레이션_횟수>")
sys.exit(1)
seed = int(sys.argv[1])
num_tickets = int(sys.argv[2])
num_simulations = int(sys.argv[3])
main(seed, num_tickets, num_simulations)