이 도전은 Tic Tac Toe 게임에 관한 것이지만 원환에서 재생됩니다.
게임 방법
필요한 게임 보드를 만들려면 일반 Tic Tac Toe 게임 보드로 시작하십시오. 먼저 왼쪽과 오른쪽 가장자리를 결합하여 실린더로 접습니다. 그런 다음 상단과 하단 가장자리를 결합하여 원환 체로 접습니다. 다음은 몇 가지 동작을 사용한 게임 보드의 간단한 시각화입니다 (Sick Paint skills!).
원환 체에서 박하 사탕 발가락의 규칙은 일반 박하 사탕 발가락과 동일합니다. 각 플레이어는 X와 Os를 번갈아 놓습니다. 행, 열 또는 대각선에 3 개의 동일한 기호가있는 첫 번째가 이깁니다.
원환 체는 시각화하기가 매우 어렵 기 때문에 보드를 종이에 다시 투영합니다. 이제 일반 박하 사탕 발가락으로 게임을 할 수 있습니다. 유일한 차이점은 깨진 대각선으로 3 개의 동일한 기호로 이길 수도 있다는 것입니다. 예를 들어 플레이어 1 (X)이 다음 보드에서 승리합니다. 원환 체의 뷰를 약간 변경하여 쉽게 볼 수 있습니다.
관심이 있으시면 Torus Games 의 Torus에서 Tic Tac Toe를 재생할 수 있습니다 . Windows, Mac 및 Android 버전이 있습니다.
최적의 게임
이 도전에서 최적의 게임에 관심이있었습니다. 최적의 게임은 두 플레이어 모두 최적의 전략을 수행하는 게임입니다. 일반 박하 사탕 발가락 보드에서 최적의 게임은 항상 무승부로 끝납니다. 흥미롭게도 원환 판에서 항상 첫 번째 플레이어가 승리합니다. 실제로 원환 판의 게임은 무승부로 끝날 수 없습니다 (플레이어가 최적이 아닌 경우).
최적의 전략은 정말 쉽습니다.
- 당신이 당신의 상징을 배치하여 이길 수 있다면 그것을하십시오.
- 그렇지 않으면 상대방이 한 행 / 열 / điagonal에 두 개의 기호가 있으면 그를 차단하십시오. 그렇지 않으면 원하는 것을하십시오.
- 그렇지 않으면 원하는 것을하십시오.
모든 최적의 게임은 정확히 7 개의 동작으로 구성되며 이러한 동작은 다음과 같은 방식으로 설명 할 수 있습니다.
- 플레이어 1은 보드의 어느 곳에 나 X를 놓습니다 (9 가지 선택)
- 플레이어 2는 보드의 어느 곳에 나 O를 배치합니다 (8 가지 선택)
- 플레이어 1은 보드의 어느 곳에 나 X를 배치합니다 (7 가지 선택).
- 2 번 선수의 움직임은 강요 될 수 있으며 (1 선택), 그렇지 않은 경우 O를 어디에나 배치합니다 (6 선택)
- 플레이어 1의 이동이 강제됩니다 (1 선택)
- 2 번 선수는 포크로 잡히고 (1 번 선수는 두 가지 방법으로 승리 할 수 있습니다) 2 번 선수는 1 번 선수를 한 방향으로 막아야합니다 (2 가지 선택)
- 1 번 선수가 마지막으로 이기고 승리 (1 선택)
프로젝트 보드에는 9 * 8 * 1 * 6 * 1 * 2 * 1 + 9 * 8 * 6 * 1 * 1 * 2 * 1 = 1728 개의 서로 다른 최적 게임이 있습니다. 여기서 당신은 하나의 전형적인 최적의 게임을 볼 수 있습니다 :
보드의 각 셀에 숫자로 레이블을 붙이면 0-8
이 게임을 숫자로 설명 할 수 있습니다 3518207
. 먼저 X는 셀 3의 가운데 (중앙 행, 왼쪽 열), 셀 5의 O (중앙 행, 오른쪽 열)보다, 셀 1의 X (상단, 가운데 열)보다 ...
이 숫자 표기법을 사용하여 자동으로 주문을 생성했습니다. 이제 1728 개의 최적 게임을 모두 정렬하고 목록을 얻을 수 있습니다.
Game 0000: 0123845
Game 0001: 0123854
Game 0002: 0124735
Game 0003: 0124753
Game 0004: 0125634
...
Game 0674: 3518207
...
Game 1000: 5167423
Game 1001: 5167432
Game 1002: 5168304
...
Game 1726: 8765034
Game 1727: 8765043
도전
이 목록은 직업의 일부입니다. 당신은 k
0에서 1727 사이의 숫자를 받게 될 것이고 당신은 k
그 정렬 된 목록의 숫자 표기법으로 게임 을 돌려 주어야 합니다.
숫자 k
(정수) 를 수신 하여 해당 게임을 계산 하는 함수 또는 프로그램을 작성하십시오 . STDIN, 명령 줄 인수, 프롬프트 또는 함수 인수를 통해 입력을 읽고 결과 (7 자리)를 읽을 수있는 형식 (예 : 0123845
또는 [0, 1, 2, 3, 8, 4, 5]
)으로 인쇄하거나 문자열 (사람이 읽을 수있는 형식) 또는 정수 (모두 포함)를 사용하여 반환 할 수 있습니다 기본 10) 또는 모든 배열 / 목록 형식의 숫자입니다.
챌린지 유형은 코드 골프입니다. 따라서 가장 짧은 코드가 승리합니다.