열셋의 게임
조합론으로 유명한 프랑스 수학자 Pierre Raymond De Montmart가 ‘열셋의 게임(Game of Thirteen)’이라는 간단한 게임을 제안했어요. 1부터 13까지 번호가 매겨진 카드 13장이 한 벌 있어요. 이 덱을 섞고 카드를 한 장씩 뽑습니다. 카드에 적힌 숫자가 그 카드를 뽑은 순서와 같으면 이를 일치(coincidence)라고 해요. 예를 들어, 다섯 번째로 뽑은 카드가 5라면 일치가 발생한 거예요. 모든 카드를 뽑는 동안 단 한 번의 일치도 없으면 게임에서 이깁니다. 이제 시뮬레이션을 사용해서 이 게임에서 이길 확률을 계산해 볼게요.
이 연습 문제를 통해, 확률을 추정하기 위해 추상적인 문제를 시뮬레이션 프레임워크로 옮겨 표현하는 능력을 한층 더 강화하게 될 거예요.
이 연습은 강의의 일부입니다
Python으로 하는 통계 시뮬레이션
연습 안내
- 각 시행마다,
deck의 카드를 모두 비복원 추출로 뽑아draw에 할당하세요. - 뽑은 결과에 일치(coincidence)가 있는지 확인하고, 있다면
coincidences카운터를 1 증가시키세요. - 일치가 전혀 없는 게임의 비율을 승리 확률로 계산하고,
prob_of_winning을 사용해 결과를 출력하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Pre-set constant variables
deck, sims, coincidences = np.arange(1, 14), 10000, 0
for _ in range(sims):
# Draw all the cards without replacement to simulate one game
draw = np.random.choice(____, size=____, replace=____)
# Check if there are any coincidences
coincidence = (draw == list(np.arange(1, 14))).any()
if coincidence == ____:
coincidences += 1
# Calculate probability of winning
prob_of_winning = ____
print("Probability of winning = {}".format(____))