본문 바로가기

엑셀 & VBA

1. 숫자야구

숫자야구란?

 

 숫자야구는 램덤으로 생성한 자연수를 맞추는 게임이다. 주로 세라지 및 네자리 자연수를 맞추된다.

 랜덤으로 생성하는 자연수를 만들때 주의 할 점은 각 자리수의 숫자는 모두 다른 수로 이루어져야한다. 예를 들어 112 같은 경우 1이 두번 등장하므로 안된다. 490처럼 모두 다른 숫자를 사용해야하며, 012 같은 숫자는 본 예시에서는 안되는 것으로 게임을 만들었다. (실제로 저렇게 해도 되는건지는 잘 모르겠다)

 

 정답을 123이라고 할때, 이 숫자를 맞추는 방법은

 

 우선, 아무 세자리 자연수를 찍는다. 513이라고 찍어보겠다.

513과 정답인 123을 비교해보면 1과 3은 둘다 가지고 있다. 3의 경우 위치도 둘다 1의 자리수로 동일하다.

이 경우 컴퓨터는 1S1B이라고 알려준다. S는 야구에서 스트라이크로 본 게임에서는 위치와 숫자를 모두 맞힌 경우를 나타낸다. B는 야구에서 볼로 본 게임에서는 숫자는 맞았지만 위치는 맞지 않는 경우를 나타낸다. 위 예시에서 숫자는 맞았지만, 위치가 틀린경우는 1 한개 뿐이므로 1B이라고 알려주었으며, 숫자와 위치가 맞은 경우는 3 한개 뿐이므로 1S라고 알려주어 최종적으로 1S1B라고 알려준다.

 

 그럼 플레이어는 513은 1S1B라는 정보를 가지고 다음 추측을 한다. 이때 426을 찍었다고 해보자. 이렇게 되면 2는 위치와 숫자가 모두 맞았으므로 1S0B이다(나머지 숫자는 모두 틀렸다). 이 두번의 추측을 통해 정답은 513과 426를 조합해서 만들 수 있는 숫자라는 사실을 알 수 있다. (789 중에는 정답이 없다는 뜻)

 

 이런 식으로 여러번의 추측을 하면서 원래의 정답을 맞추는 게임이다. 시도 횟수가 적을 수록 게임을 더 잘 플레이한 것이다.

 

 아래는 만들어본 숫자야구 게임 파일이다. 숫자야구를 만들기 위해서는 간단한 함수들과 약간의 매크로 사용이 필요하다.

 

Bulls and cows.cell
0.01MB