배경
진수는 A의 경기 두 선수 추상 전략 게임이다 K×K
육각형 타일의 마름모. 마름모의 반대편 두면은 흰색으로, 다른 두 개는 검은 색으로, 두 명의 플레이어 (흑백)는 교대로 비어있는 타일 위에 자신의 색의 토큰을 놓습니다. 색상의 반대편 사이에 경로를 구성하는 플레이어가 먼저 승리합니다. 게임은 무승부로 끝날 수 없으며, 첫 번째 플레이어는 보드 크기에 관계없이 승리 전략을 가지고있는 것으로 알려져 있습니다 (자세한 내용은 Wikipedia 페이지 참조).
작업
이 과제에서는 보드 크기를에 고정하고 보드를 K = 4
다음 표로 나타냅니다. 굵은 선은 인접한 타일을 나타냅니다.
당신의 임무는 첫 번째 플레이어를위한 승리 전략을 만들어내는 것입니다. 이것은 상대 플레이어가 합법적으로 움직일 때마다 승리가되어야한다는 것을 의미합니다. 귀하의 입력은 게임 위치 (보드에 토큰 배열)이며, 출력은 아래에 지정된 형식으로 합법적 인 이동입니다. 우승 전략을 직접 찾으려면이 스포일러를 읽지 마십시오.
백인이 먼저 가정 할 때 가능한 승리 전략의 개요. 먼저 5를 선택하십시오. 그 후, 5에서 맨 아래 행까지의 경로가 있거나 검은 색이 어느 시점에서 0 또는 1을 선택하는 경우 0 또는 1이 비어있는 것을 선택하여 응답하십시오. 검은 색이 9 또는 13을 선택하는 경우 10을 선택한 다음 14 또는 15 중 비어있는 것을 선택하십시오. 검은 색이 9, 13 또는 14를 선택하지 않으면 9를 선택하고 다음 중 13 또는 14가 비어있는 것을 선택하십시오. 검정색이 14를 선택하면 15를 선택하여 응답하십시오. 다음으로 비어있는 경우 10을 선택하십시오. 검은 색이 10을 선택하면 11로 응답하고, 검은 색으로 6을 선택하면 7로 응답하고 다음 2 또는 3 중 비어있는 것을 응답하십시오. 검은 색이 6을 선택하지 않으면 선택하면 5에서 아래쪽 행까지의 경로가됩니다.
입력과 출력
입력은 16 자 문자열로 WBE
, 흰색, 검은 색 및 빈을 나타냅니다. 그것들은 위에 열거 된 것처럼 보드의 타일을 나타냅니다. 다음 중에서 입력 방법 (출력 방법도 결정)을 선택할 수 있습니다.
- STDIN에서 입력하고 STDOUT으로 출력합니다.
- 하나의 명령 행 인수로 입력하고 STDOUT에 출력합니다.
- 16 개의 단일 문자 명령 행 인수로 입력하고 STDOUT에 출력하십시오.
- 명명 된 함수의 인수로 입력하고 반환 값으로 출력합니다.
당신의 결과물은 당신의 차례가되어 다음 토큰을 놓을 타일을 나타냅니다. 다음과 같은 출력 형식 중에서 선택할 수 있습니다.
- 0부터 시작하는 인덱스 (위 그림에서 사용).
- 1 기반 색인.
- 입력 문자열 중 하나를
E
대체W
하거나B
플레이어에 대해 선택한 문자열 .
규칙
전략은 결정 론적이어야합니다. 당신은 당신의 전략을 사용하여 빈 보드에서 도달 할 수없는 게임 위치, 또는 어느 한 플레이어에 이미 승리 한 위치를 올바르게 처리 할 필요가 없으며, 충돌 할 수 있습니다. 반대로, 전략을 사용하여 접근 할 수있는 보드에서는 법적 조치를 취해야합니다.
이것은 코드 골프이므로 가장 낮은 바이트 수가 이깁니다. 표준 허점은 허용되지 않습니다.
테스팅
수동으로 수행하는 것이 지루하기 때문에 항목 유효성 검사를 위해 Python 3 컨트롤러를 작성했습니다. 여기에서 찾을 수 있습니다 . 처음 세 가지 입력 형식과 Python 3 함수 (다른 언어의 함수는 프로그램에 래핑해야 함), 세 가지 출력 형식 및 두 플레이어를 모두 지원합니다. 전략이 이기지 않으면 찾은 게임이 사라 지므로 프로그램을 조정할 수 있습니다.
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.
오래 전에 이겼어야합니까, 아니면 내가 틀렸습니까?