バックグラウンド
六角はK×K
六角形のタイルの菱形でプレイされる2プレーヤーの抽象戦略ゲームです。菱形の反対側の2つの側面は白く色付けされ、他の2つは黒く、2人のプレーヤー(黒と白)は交互に色のトークンを空いているタイルに配置します。最初に自分の色の反対側の間にパスを構築することに成功したプレーヤーが勝者です。ゲームは引き分けで終了することはできず、最初のプレイヤーはボードのサイズに関係なく勝利戦略を持っていることが知られています(詳細はWikipediaのページを参照してください)。
タスク
この課題では、ボードサイズをに固定し、ボードをK = 4
次のグリッドとして表します。太い線は隣接するタイルを示します。
あなたの仕事は、最初のプレーヤーのための勝利戦略を作成することです。あなたは黒か白のどちらかを選ぶことができます。これは、相手のプレーヤーがどのような合法的な動きをしても、あなたのプレーは勝利をもたらさなければならないことを意味します。入力はゲームの位置(ボード上のトークンの配置)であり、出力は以下に指定された形式での合法的な動きです。勝者戦略を自分で見つけたい場合は、このネタバレを読まないでください。
白が最初であると仮定して、1つの可能な勝利戦略の概要。 最初に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への出力。
- 1つのコマンドライン引数として入力し、STDOUTに出力します。
- 16文字の1文字のコマンドライン引数として入力し、STDOUTに出力します。
- 名前付き関数の引数として入力し、戻り値として出力します。
次のトークンが移動する番なので、出力は次のトークンを配置するタイルを表します。次の出力形式から選択できます。
- ゼロベースのインデックス(上の画像で使用されているもの)。
- 1から始まるインデックス。
- プレーヤー用に選択した、またはユーザーが選択した文字列に
E
置き換えられた入力文字列。W
B
ルール
あなたの戦略は決定論的でなければなりません。戦略を使用して空のボードから到達できないゲームの位置、またはいずれかのプレイヤーがすでに勝っている位置を正しく処理する必要はなく、クラッシュする可能性があります。逆に、あなたの戦略を使用して到達可能なボードでは、合法的な動きを返さなければなりません。
これはコードゴルフなので、最小バイト数が優先されます。標準の抜け穴は許可されていません。
テスト中
手作業で行うのは非常に面倒なので、エントリを検証するためのPython 3コントローラを作成しました。あなたはここでそれを見つけることができます。最初の3つの入力形式とPython 3関数(他の言語の関数はプログラムにラップする必要があります)、3つの出力形式すべて、および両方のプレーヤーをサポートしています。戦略が勝っていない場合は、見つかった敗北ゲームを出力するので、プログラムを微調整できます。
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.
私はずっと前に勝っていたはずですか、それとも間違っていますか?