일상의 잡다한

숫자야구가 생각나서

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

최근 저는 구글 플레이 스토어에서 '아이큐 야구 - 고난도 숫자야구'라는 게임을 발견하고 설치해 보았습니다. 이 게임은 제가 알던 숫자야구 게임과는 달리 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'까지 포함된 고난도 버전의 숫자야구 게임에 유용하게 적용될 수 있습니다. 이전에 숫자야구 솔버를 찾아본 적이 있지만 찾지 못했던 저로서는, 이번에 인공지능의 도움으로 직접 만들어본 것이 매우 흥미롭고 유용한 경험이었습니다.

 

반응형