75 — 게임: 간단한 상대
게임 상대에게는 운이 아니라 규칙이 필요합니다. Nim에서는 1~3개 돌을 가져가며, 마지막 돌을 가져가는 쪽이 집니다. 컴퓨터는 승리 위치를 유지하는 전략으로, 공정 모드에서는 주사위처럼 대응할 수 있습니다.
단계
돌무더기를 시작하고 규칙을 설명하세요:
실행해 보기 →pile = 12 show f"The pile has {pile} stones. Take 1, 2, or 3."한 턴은 돌을 제거합니다:
pile = pile - taken. 무더기가 0이 되면 게임이 끝나고, 마지막 돌을 가져간 쪽이 집니다:
실행해 보기 →while pile > 0: ask take, "How many (1-3)? " taken = int(take) if taken < 1 or taken > 3: show "Take 1, 2, or 3." continue pile = pile - takencontinue는 컴퓨터 차례를 건너뛰고 올바른 숫자를 다시 물어봅니다.컴퓨터 전략: 당신이 움직인 뒤 무더기가
n이면, 컴퓨터가n % 4개의 돌을 가져가면(0이 아닐 때) 4의 배수를 남겨 당신에게 지는 위치를 만듭니다.n % 4가 0이면 어떤 움직임도 당신에게 이기는 위치를 주므로 공정 모드에서 1~3 중 무작위로 가져갑니다:
실행해 보기 →move = pile % 4 if move == 0: move = random_number(1, 3) pile = pile - move전체 게임.
nim.nme로 저장하세요:
실행해 보기 →# nim.nme — 1-3개 돌 가져가기; 마지막 돌이 집니다. # 실행: nme 실행 nim use random latest pile = 12 show f"The pile has {pile} stones. Take 1, 2, or 3." while pile > 0: ask take, "Your turn — how many (1-3)? " taken = int(take) if taken < 1 or taken > 3: show "Take 1, 2, or 3." continue pile = pile - taken if pile == 0: show "You took the last stone. You lose!" break move = pile % 4 if move == 0: move = random_number(1, 3) pile = pile - move show f"Computer takes {move}. Pile is now {pile}." if pile == 0: show "The computer took the last stone. You win!"플레이어가 2, 2, 1을 가져가며 실행하세요:
printf '2\n2\n1\n' | nme 실행 nimThe pile has 12 stones. Take 1, 2, or 3. Your turn — how many (1-3)? Computer takes 2. Pile is now 8. Your turn — how many (1-3)? Computer takes 2. Pile is now 4. Your turn — how many (1-3)? Computer takes 3. Pile is now 0. The computer took the last stone. You win!컴퓨터의 움직임 후 무더기는 4의 배수가 됩니다. 전략이 통하는 이유입니다.
직접 해보기
시작 무더기를 15로 바꿔 다시 플레이하세요: 공정 모드가 도와주지 않으면
전략이 여전히 이깁니다. 몇 번 이겼는지 세는 best 카운터를 추가하세요.
배운 것
%(모듈로)가 나머지를 알려 주며, 이것이 Nim 전략의 핵심입니다.continue는 잘못된 움직임에서 다음 반복 턴으로 건너뜁니다.- 전략은 게임 상태에서 계산한 규칙일 뿐입니다.
- 전략이 못 이길 때 무작위 폴백이 상대를 정직하게 만듭니다.