당신의 목표는 Wythoff의 Nim 게임을위한 완벽한 플레이어를 작성하는 것입니다 .
Wythoff의 님의 규칙
Wythoff의 님 (Nim)은 결정적인 2 인용 게임으로 두 개의 동일한 카운터로 쌓입니다. 플레이어는 다음 중 하나를 수행하는 교대 차례입니다.
- 첫 번째 더미에서 하나 이상의 카운터 제거
- 두 번째 더미에서 하나 이상의 카운터 제거
- 첫 번째 파일과 두 번째 파일 모두에서 같은 수의 카운터 (하나 이상)를 제거하십시오.
물론, 더미는 음수가 될 수 없지만, 0이 될 수 있습니다. 마지막 카운터를 제거하는 사람이 게임에서 승리합니다.
보다 기하학적 인 생각을 위해이 애플릿에서 재생할 수있는 게임의 동등한 구성이 있습니다 . 단일 여왕은 왼쪽 아래에 모서리가있는 1/4 무한 체스 판의 사각형에서 시작합니다. 플레이어는 여왕을 교대로 움직이며 체스 여왕처럼 움직이지만 세 방향으로 제한됩니다.
- 내려가는
- 왼쪽
- 대각선 아래로 그리고 왼쪽
여왕을 모퉁이로 옮기는 사람이 이깁니다.
여왕의 좌표 (코너 포함 (0,0)
)를 각 더미의 크기 와 연관 시키면 두 게임이 동일하다는 것을 쉽게 알 수 있습니다.
완벽한 플레이
(완벽한 플레이와이기는 움직임의 개념에 익숙하다면 이것을 건너 뛸 수 있습니다.)
Wythoff의 님은 유한하고 결정적인 게임이므로 완벽한 플레이 라는 개념을 가지고 있습니다 . 퍼펙트 플레이어는 항상 이론적으로이긴 위치에서 승리하는 전략으로, 승리를 보장하는 전략이 존재하는 위치를 의미합니다.
승리 전략이 되려면, 방금 이사 한 플레이어의 이론적 인 승리 위치로 이동하기에 충분하므로 플레이어는 다음에 가지 않습니다. 이 우승 포지션 중 첫 번째 포지션 ( 콜드 포지션 이라고도 함 )은 다음과 같습니다 (0,0), (1,2), (2,1), (3,5), (5,3)
. Wythoff의 Nim에 대한 승리 전략과 승리 위치를 생성하는 공식을 찾는 알고리즘에 대한 설명은 Wikipedia 기사 를 참조하십시오 .
프로그램 요구 사항
프로그램이나 함수를 작성하면 위치를 입력으로 받아 이동 후 위치의 형태로 우승 이동을 출력합니다. 가장 적은 바이트가 이깁니다.
이기는 움직임이 존재하지 않는 경우, 즉 위치가 이론상 손실 인 경우 프로그램은이를 표시하고 몰수해야합니다.
프로그램은 적절한 시간 내에 실행되어야합니다. 따라서 지수 재귀 게임 트리 검색으로는 충분하지 않습니다. 전략을 미리 계산하고 하드 코딩하려면 괜찮습니다.
입력
(i,j)
파일 크기를 나타내는 음이 아닌 숫자 쌍 입니다 99
. 튜플, 목록 또는 원하는 컨테이너 등 두 가지 숫자가 될 수 있습니다.
산출
이동 후 위치를 다시 두 개의 숫자 또는 컨테이너로 인쇄하거나 출력하십시오. 이것은 우승 위치로 합법적으로 이동해야합니다. 그러한 움직임이 여러 개인 경우 어느 것이나 괜찮습니다.
이기는 움직임이 없으면 출력에이를 표시해야합니다. 모든 출력은 같은 False
, None
0, 또는 (-1,-1)
그 법적 위치 아니라, 모든지는 입력에 대해 동일만큼, 할 것입니다.
예제 실행
f(5,0) = (0,0)
f(2,2) = (1,2) # Or (2,1) or (0,0)
f(1,2) = False
f(13,9) = (13,8) # Or (10,6)
f(10,6) = False
f(5,10) = (5,3)
f(25,30) = (8,13)