이 과제는 현재 보드 상태에 따라 틱택 토 게임의 NxN 게임 에서 다음으로 최고의 움직임을 출력하기 위해 선택한 언어로 minimax 기능 을 작성하는 것 입니다. 보드 입력은 Matrix, 2D Collection 또는 귀하에게 의미가 있지만 규칙을 준수하는 다른 것으로 받아 들여질 수 있습니다 . 되는 출력 다음 최고의 이동 을 위해 그것을 차례 누구든지이 현재 어디에, X가 시작 것으로 간주됩니다 .
Minimax 알고리즘에 대한 빠른 배경
minimax 알고리즘의 기본 아이디어는 가능한 모든 결과를 DAG로 열거 한 다음 처음으로 이동 한 키를 기준으로 이동 순서가 플레이어에게 미치는 이점에 따라 가중치를 부여하는 것입니다. 그런 다음 가능한 모든 결과는 첫 번째 움직임으로 '버킷 화'되며 모든 결과의 합계 (손실의 경우 -1, 동점의 경우 0, 승리의 경우 1)를 기준으로 점수가 매겨집니다. 여러 명의 플레이어가 플레이해야하는 구현에서는 플레이어의 모든 가능한 움직임과 상대방의 가능한 모든 응답을 열거합니다. 예를 들어, 틱택 토 게임 (첫 번째 이동 후)에는 8 개의 가능한 첫 번째 이동이있을 수 있으며 다음 턴을 분석 할 때 모두 동일하게 보일 수 있습니다. 그러나 각 가능한 이동 세트에 대해 가능한 모든 결과를 반복하여 최종 결과를 도출하고 모두 합산함으로써,
tic-tac-toe와 관련하여 mini-max 알고리즘에 대한보다 상세하고 상황에 맞는 요약을 보려면 여기를 참조하십시오 : http://neverstopbuilding.com/minimax
XKCD (3x3 솔루션 만)
규칙
- 모든 언어를 사용할 수 있지만 외부 minimax 라이브러리는 허용되지 않습니다.
- 출력은 좌표 (0-n, 0-n) 또는 최상의 다음 이동을 나타내는 숫자 (1-n * n) 일 수 있습니다.
- 또한, 최상의 시나리오가 승리가 아닌 손실 또는 동점 일 경우를 식별 할 수 있어야합니다.
- 상실이나 동점을 나타내는 방법은 다시 한 번 당신에게 달려 있습니다.
- 입력은 전통적인 X와 O를 사용해야하며 X가 먼저 움직이는 것으로 가정해야합니다. 공백은 무엇이든 나타낼 수 있습니다.
- 프로그램으로 들어오는 모든 입력에 n O와 n + 1 X가 있다고 가정 할 수 있습니다. 다시 말해, 올바른 보드를 가지고 있다고 가정 할 수 있습니다.
- 보드의 현재 상태는 프로그램에 대한 유일한 입력이어야합니다. 재귀를 사용하는 경우 입력 요구 사항을 용이하게하기 위해 헬퍼 메소드를 작성해야합니다. 자세한 설명 은 /codegolf//a/92851/59376 을 참조 하십시오 .
- 10> = n> = 1의 값이 지원되어야합니다. n> 10 동안 프로그램이 "시간 초과"되면 일부 언어의 처리 능력이 현저히 낮아지기 때문에 (특히 웹 콘솔 사용)이 기능도 허용됩니다.
심사
- 이것은 코드 골프이므로 프로그램의 최하위 바이트 수와 표준 허점은 보편적으로 허용되지 않습니다.
- 동점 인 경우 가장 큰 'n'을 지원하는 프로그램이 승리합니다.
입력 예
2x2
[[X,O]
[-,-]]
출력 : 2 또는 [0,1] (3 또는 [1,1]도 정확할 것임) (사용한 형식을 쉽게 설명 할 수있는 한 임의의 위치 표시 형식, 임의)
3x3
[[X,O,X]
[O,X,-]
[-,-,-]]
출력 : -1 (손실)
다시 한 번 원하는 입력 형식이 허용되지만 X와 O를 사용해야합니다. 제공된 예제는 해당 형식에 제한되는 것이 아니라 영감을주기위한 것입니다.