최근 저는 구글 플레이 스토어에서 '아이큐 야구 - 고난도 숫자야구'라는 게임을 발견하고 설치해 보았습니다. 이 게임은 제가 알던 숫자야구 게임과는 달리 4자리 숫자에 'A', 'B'까지 추가하여 난이도를 대폭 상승시킨 버전이었습니다. 기존의 숫자야구 게임보다 훨씬 까다로워져, 제 능력만으로는 금방 해결하기 어려워 보였습니다.
이에 따라, 저는 코드를 작성하여 이 문제를 해결하기로 마음먹었습니다. 프로그래밍에 대한 지식이 많지 않음에도 불구하고, 생성형 인공지능의 도움을 받아 다음과 같은 파이썬 코드를 작성했습니다.
from itertools import permutations
import random
# 가능한 모든 4자리 숫자 조합 생성 (0을 포함, 추가로 A, B를 포함)
possible_chars = '123456789AB'
possible_numbers = list(permutations(possible_chars, 4))
def feedback(guess, real):
strike = 0
ball = 0
for i in range(4):
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 = random.choice(possible_numbers)
while True:
# 사용자에게 현재 추측을 보여주고, 스트라이크와 볼 수를 입력받음
print("현재 추측:", ''.join(current_guess))
user_strike = int(input("스트라이크 수: "))
user_ball = int(input("볼 수: "))
# 정답을 맞췄다면 반복 종료
if user_strike == 4:
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
이 코드는 사용자로부터 스트라이크와 볼의 수를 입력받아, 그 피드백을 바탕으로 다음 추측을 좁혀 나가는 방식으로 작동합니다. 이 방식을 통해 평균적으로 5번에서 6번의 시도 끝에 문제를 해결할 수 있었습니다.
이러한 접근법은 특히 '아이큐 야구'와 같이 4자리 수에 'A', 'B'까지 포함된 고난도 버전의 숫자야구 게임에 유용하게 적용될 수 있습니다. 이전에 숫자야구 솔버를 찾아본 적이 있지만 찾지 못했던 저로서는, 이번에 인공지능의 도움으로 직접 만들어본 것이 매우 흥미롭고 유용한 경험이었습니다.
'일상의 잡다한' 카테고리의 다른 글
숫자야구 볼 판정 코드를 작성해 봤음 (1) | 2024.03.19 |
---|---|
숫자야구 솔버 3자리 파이썬 0-9 사용 (0) | 2024.03.16 |
로스트아크 - 우리 마을 골목 대장 숨은 아이 찾기 (0) | 2024.02.29 |
로스트아크 실리안 호감도 퀘스트 (0) | 2024.02.29 |
로스트아크 아크 7개를 다 모았더니 (0) | 2024.02.22 |