Gomoku or Five in a lineは、黒と白の石を使ったグリッドで2人のプレイヤーがプレイするボードゲームです。石を(横、縦、または対角線)続けて配置できる人がゲームに勝利します。5
ルール
このKoTHでは、Swap2ルールを再生します。つまり、ゲームは2つのフェーズで構成されます。最初のフェーズでは、2人のプレーヤーが誰が先に行くか、誰が黒をプレーするかを決定し、その後、プレーヤーから始めて各ラウンドに1つの石を置きます。黒を選んだ人。
初期段階
プレーヤーをA&Bにして、Aがゲームを開くようにします。
- Aはボード上に2つの黒と1つの白い石を配置します
- Bは、次の3つの移動のいずれかを選択できます。
- プレーヤーBが黒を再生することを決定:初期フェーズが終了しました
- プレーヤーBが白い石を置くことに決め、白を再生する:初期フェーズが終了しました
- プレーヤーBが1つの黒と1つの白の石を再生することを決定:Aが色を選択する
ゲームフェーズ
各プレーヤーは、黒をプレイするプレーヤーから始めて、自分の色の石を1つボード上に置きます。これは、プレイする空きスペースがなくなるまで続きます(この場合はタイです)、または1人のプレーヤーがなんとかして石をプレイします行(その場合、そのプレイヤーが勝ちます)。
行は、水平、垂直、または対角線を意味します。勝利は勝利です。プレーヤーが複数の行を獲得できたかどうかは関係ありません。
KoTHゲームのルール
- 各プレイヤーは他のプレイヤーと2回対戦します:
- 最初はだれが最初に行くかはランダムに決定されます
- 次のゲームでは、最後にプレイしなければならないプレイヤーが最初になります
- 勝利は2ポイント、同点1、負け0
- 目標は、できるだけ多くのポイントを獲得することです
あなたのボット
可能な限り多くの言語でこの課題にアクセスできるようにするために、入出力はstdin / stdout(行ベース)を介して行われます。ジャッジプログラムは、ボットのstdinに 1行を出力することによってプログラムにプロンプトを表示し、ボットは1行をstdoutに出力します。
EXIT
メッセージを受信すると、裁判官がプロセスを強制終了する前に、ファイルへの書き込みを完了するための0.5秒が与えられます。
ランダム性
トーナメントを検証可能にするために、裁判官はシードされたランダム化を使用し、ボットも同じ理由でそうする必要があります。ボットには、使用するコマンドライン引数を介してシードが与えられます。次のセクションを参照してください。
議論
ボットは2つのコマンドライン引数を受け取ります。
- 対戦相手の名前
- ランダム性の種
ユーザーの状態
プログラムはゲームごとに常に新しく開始されるため、ファイルを使用して、保持したい情報を保持する必要があります。現在のディレクトリにあるすべてのファイルの読み取り/書き込み、またはサブフォルダーの作成/削除を行うことができます。親ディレクトリ内のファイルへのアクセスは許可されていません!
入出力フォーマット
BOARD
現在の石のリストを表すであろう、それだけ石が置かれる位置を示し、各エントリの形式であろうと範囲内の整数であろうとのいずれかであろう(黒)または(白い)。((X,Y),COLOR)
X
Y
COLOR
"B"
"W"
さらにSP
、単一のスペース、それぞれがの範囲にある2つの整数のXY
タプル(X,Y)
を示し、選択肢を示します。|
初期段階では、3種類のメッセージがあります。
Prompt (judge) -> Answer (bot)
"A" SP "[]" -> XY XY XY
"B" SP BOARD -> "B" | "W" SP XY | XY XY
"C" SP BOARD -> "B" | "W"
- 最初のメッセージは3つのタプルを要求します。最初の2つは黒い石の位置で、3番目は白い石の位置です。
- 2番目のメッセージは、次のいずれかを要求します。
"B"
->黒を選択"W" SP XY
->白を選び、白い石をXY
XY XY
-> 2つの石を配置します(1つ目は黒、2つ目は白)。
- 最後の1つは、再生する色を尋ねるだけです。
その後、通常のゲームが始まり、メッセージがはるかに簡単になります
N BOARD -> XY
どこN
ラウンドの数である(で始まる)とあなたが石を置く位置になります。XY
回答を期待しない追加のメッセージが1つあります
"EXIT" SP NAME | "EXIT TIE"
NAME
勝ったボットの名前はどこですか。2番目のメッセージは、誰も勝てず、石を置くための空きスペースがなくなったためにゲームが終了した場合に送信されます(これは、ボットに名前を付けることができないことを意味しますTIE
)。
フォーマット
ボットからのメッセージはスペースなしでデコードできるため、すべてのスペースは無視されます(たとえば(0 , 0) (0,12)
、と同じように扱われます(0,0)(0,12)
)。裁判官からのメッセージには、異なるセクションを区切るためのスペースしか含まれていません(つまりSP
、上記でで説明したように)。スペースで行を分割できます。
無効な応答があると、そのラウンドは失われます(EXIT
メッセージは引き続き表示されます)。ルールを参照してください。
例
次に、実際のメッセージの例をいくつか示します。
A []
B [((0,0),"B"),((0,1),"W"),((14,14),"B")]
1 [((0,0),"B"),((0,1),"W"),((1,0),"B"),((1,1),"W"),((14,14),"B")]
裁判官
裁判官プログラムはここにあります:ボットをボットに追加するには、bots
フォルダーに新しいフォルダーを作成し、そこにファイルmeta
を配置し、名前、コマンド、引数、およびフラグ0/1(stderrを無効/有効にする)をそれぞれ含むファイルを追加します別の行に。
トーナメントを実行するには、ただ実行./gomoku
し、単一のボットをデバッグして実行し./gomoku -d BOT
ます。
注:ジャッジのセットアップと使用方法の詳細については、Githubリポジトリを参照してください。3つのボットの例(Haskell、Python、JavaScript)もあります。
ルール
- ボットの変更ごとに*トーナメントが再実行され、最も多くのポイントを獲得したプレイヤーが勝利します(タイブレーカーが最初に提出されます)
- 共通の戦略を実行しない限り、複数のボットを送信できます
- ディレクトリ外のファイルにアクセスすることはできません(例:他のプレイヤーのファイルの操作)
- ボットがクラッシュしたり無効な応答を送信したりすると、現在のゲームが終了し、そのラウンドに敗北します
- 裁判官は(現在)ラウンドごとの時間制限を強制していませんが、すべての提出物をテストすることが不可能になる可能性があるため、費やす時間を低く保つことをお勧めします**
- 裁判官プログラムのバグの悪用は抜け穴として数えられる
* Githubを使用して、ボットを直接bots
ディレクトリに直接送信することをお勧めします(変更する可能性もありますutil.sh
)
**通知される問題が発生した場合は、500ミリ秒未満(それで十分です)であれば今のところ問題ないはずです。
チャット
質問がある場合、またはこのKoTHについて話したい場合は、チャットに参加してください。