102 lines
3.4 KiB
Python
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) |