この課題は、書くことですミニマックス関数の出力に、お好みの言語での次の最善手のNxNのゲーム三目並べ与えられた現在のボードの状態を。ボード入力は、Matrix、2D Collection、またはユーザーにとって理にかなっているものの、ルールを順守するものとして受け入れることができます。出力はされて次善の動きのためのは、それが現在で回す誰でも、Xが起動していると考えられています。
Minimaxアルゴリズムの簡単な背景
ミニマックスアルゴリズムの基本的な考え方は、考えられるすべての結果をDAGとして列挙し、最初の動きによってキー付けされた一連の動きがプレーヤーに与える利益によってそれらを重み付けすることです。可能なすべての結果は、最初の動きによって「バケット化」され、すべての結果の合計に基づいてスコアリングされます(損失の場合は-1、同点の場合は0、勝利の場合は1)。複数のプレイヤーがプレイする必要がある実装では、プレイヤーによるすべての可能な動きと、対戦者によるすべての可能な反応も列挙します。たとえば、三目並べのゲーム(最初の動きの後)では、8つの可能な最初の動きがあり、次のターンだけを分析するときはすべて同じように見えるかもしれません。しかし、最終的な結果をもたらす可能性のある一連の動きごとに考えられるすべての結果を反復処理し、それらをすべて合計することにより、
tic-tac-toeの観点から見たmini-maxアルゴリズムのより詳細で詳細なコンテキストの概要については、http://neverstopbuilding.com/minimaxを参照してください。
XKCD(3x3ソリューションのみ)
ルール
- 任意の言語を使用できますが、外部ミニマックスライブラリは許可されていません。
- 出力は、次の最適な動きを示す座標(0-n、0-n)または数値(1-n * n)にすることができます。
- これに加えて、ベストケースシナリオが勝利ではなく損失または同点である場合を特定できる必要があります。
- あなたが損失や同点を示す方法は、あなた次第です。
- 入力は従来のXとOを使用する必要があり、Xが最初に移動すると想定する必要があります。空白は何でも表すことができます。
- プログラムに入力される入力には、n個のOとn + 1個のXがあると仮定できます。言い換えると、整形式のボードを取得していると仮定できます。
- ボードの現在の状態がプログラムへの唯一の入力である必要があります。再帰を使用している場合、入力要件を容易にするためにヘルパーメソッドを作成する必要があります。詳細については、https://codegolf.stackexchange.com/a/92851/59376を参照してください。
- 10> = n> = 1の値をサポートする必要があります。プログラムがn> 10で「タイムアウト」になった場合、一部の言語の処理能力が大幅に低いため(特にWebに面したコンソールを使用しているため)、これも受け入れられます。
審査
- これはコードゴルフであるため、プログラムの最小バイト数が優先され、標準的な抜け穴は一般的に許可されません。
- 同点の場合、最大の「n」をサポートするプログラムが勝ちます。
入力例
2x2
[[X,O]
[-,-]]
出力: 2または[0,1](3または[1,1]も間違いなく正しいでしょう)(使用した形式を簡単に説明できる限り、場所の表示の任意の形式)
3x3
[[X,O,X]
[O,X,-]
[-,-,-]]
出力: -1(損失)
繰り返しますが、必要な入力形式はすべて許可されますが、XとOを使用する必要があります。提供される例は、単にその形式に制約することを意図したものではなく、単に刺激を与えるためのものです。