일상의 잡다한

숫자야구 솔버 3자리 파이썬 0-9 사용

눈길에발자욱 2024. 3. 16. 15:12

from itertools import permutations
import random

# 가능한 모든 3자리 숫자 조합 생성 (0을 포함하고, 추가로 A, B를 제외함)
possible_chars = '0123456789'
# 중복을 제거한 후 리스트로 변환
possible_numbers = list(permutations(possible_chars, 3))

def feedback(guess, real):
    strike = 0
    ball = 0
    for i in range(3):
        if guess[i] == real[i]:
            strike += 1
        elif guess[i] in real:
            ball += 1
    return strike, ball

def refine_possible_numbers(possible_numbers, guess, user_feedback):
    refined = []
    for number in possible_numbers:
        if feedback(guess, number) == user_feedback:
            refined.append(number)
    return refined

# 초기 추측 최적화: 가능한 숫자 목록의 중간값을 선택
current_guess = ('5', '0', '4')  # 예시로 '504'를 초기 추측으로 사용

while True:
    # 사용자에게 현재 추측을 보여주고, 스트라이크와 볼 수를 입력받음
    print("현재 추측:", ''.join(current_guess))
    user_strike = int(input("스트라이크 수: "))
    user_ball = int(input("볼 수: "))

    # 정답을 맞췄다면 반복 종료
    if user_strike == 3:
        print("정답을 맞췄습니다!")
        break

    # 가능한 숫자 목록을 사용자 피드백으로 좁혀나감
    possible_numbers = refine_possible_numbers(possible_numbers, current_guess, (user_strike, user_ball))

    # 새로운 추측을 가능한 숫자 목록 중 하나를 랜덤하게 선택
    # 가능한 숫자 목록이 비어있지 않은지 확인
    if possible_numbers:
        current_guess = random.choice(possible_numbers)
    else:
        print("에러: 가능한 숫자 목록이 비어있습니다.")
        break

반응형