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
'일상의 잡다한' 카테고리의 다른 글
축문을 쓰는데 도움이 되는 코드 작성 (0) | 2024.04.22 |
---|---|
숫자야구 볼 판정 코드를 작성해 봤음 (1) | 2024.03.19 |
숫자야구가 생각나서 (0) | 2024.03.16 |
로스트아크 - 우리 마을 골목 대장 숨은 아이 찾기 (0) | 2024.02.29 |
로스트아크 실리안 호감도 퀘스트 (0) | 2024.02.29 |