メタ三目並べのゲームをプレイしましょう!
これは王様ですメタ三目並べのオブザトーナメントです。Meta tic-tac-toeのルールは次のとおりです。
三目並べの規則はすべて適用されます。
1つのマスターボードを作成するために9つのボードが配置されています。そのようです:
0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8 ======================== 0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8 ======================== 0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8
ボード0は左上のボードを指し、ボード1は上のミドルボードを指します...このように
0|1|2 ----- 3|4|5 ----- 6|7|8
ボード3、タイル4と言うと、左中央のボードの中央のタイルを意味します。
小さいボードの1つでしか移動できません。
小さいボードの1つに勝った場合、そのボード全体がタイルとしてカウントされます。
いずれかのボットが勝つ前にボードの1つがいっぱいになると、nobodyタイルとしてカウントされます。
マスターボードに勝った人が勝ちます!
ただし、重要なねじれがあります。ボード7、タイル2に行くとしましょう。つまり、あなたのターンでは、ボード2にしか行くことができません。次に、ボード2、タイル5に行くとしましょう。のみボード5に進みます。ボード1がいっぱいだとしましょう。(もうスポットが残っていないか、私たちの1人がすでにボード1を獲得しています)今、ボード5、タイル1に行くと、好きなボードに行くことができます。
これらのルールは次のように見なされます。
- 前のプレイヤーがプレイしたポジションに対応するボードでプレイする必要があります。
- Xがボード2でプレーする場合、タイル5。Oはボード5でプレイする必要があります
- ターゲットボードがいっぱい(同点)の場合、または既に勝者がいる場合、次の動きは制約を受けません。
- 勝者のいるボードは、制約のない動きであってもプレーすることはできません。
これが少しわかりにくい場合は、こちらからオンラインで試すことができます。(「最初のタイルの勝ち」から「3タイルの連続」に切り替えるようにしてください)
これがチャレンジのルールです。
このゲームをプレイするボットを作成する必要があります。
Bot 1はXsであり、最初に行くことができます。これらのコマンドライン引数を使用して呼び出されます(かっこで囲まず)。
X (whose turn) --------- (board 0) --------- (board 1) --------- (board 2) --------- (board 3) --------- (board 4) --------- (board 5) --------- (board 6) --------- (board 7) --------- (board 8) --------- (master board) xx (last move)
最初の文字は、ボットが誰であるかを表します。この場合、ボット1はXとしてプレイします。次の9行は9つのボードを指します。11行目はマスターボードを示しています。「xx」は最後の動きです。ここで、bot1は0から8までの2つの数字を印刷する必要があります。数字1はボットが移動するボードで、数字2はそのボードのタイルです。コントローラーはこの動きを追跡します。ボット1が38を印刷するとします。ボードは次のようになります。
| | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | |X || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | |
bot2は次の引数で呼び出されます:
O --------- --------- --------- --------X --------- --------- --------- --------- --------- --------- 38
ここで、ボット2はボード8で移動する必要があります(ボット1がタイル3にxを配置したため)。bot2が84を印刷するとします。ボードは次のようになります。
| | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | |X || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || |O| ----- || ----- || ----- | | || | | || | |
これで、bot1は次の引数で呼び出されます。
X --------- --------- --------- --------X --------- --------- --------- --------- ----0---- --------- 84
bot1はボード4に移動する必要があります。しかし、bot1はいたずらな小さなボットであり、ボード3に移動することを決定します。「30」と出力されます。ボードはまったく変わりません。マスターボットはこれを追跡します。これで、bot2は次の引数で呼び出されます。
O --------- --------- --------- --------X --------- --------- --------- --------- ----0---- --------- xx
これで、ボット2は任意の場所に移動できます(もちろん38と84を除く)。これは、誰かが3つのマスターボードを連続して獲得するまで続きます。次に、bot2がXで、最初に行く2番目の対戦があります。
これは、すべてのボットが他のすべてのボットをプレイするまで繰り返されます。
得点
スコアリングは次のように機能します。
各試合の勝者は100 + number of open spots
ポイントを獲得します。そうすれば、ボットがすぐに勝てばより価値があります。ボットが無効な動きをするたびに、1ポイントを失います。250ラウンド後にどちらのボットも勝たなかった場合、各ボットは10ポイントを失い、次のラウンドに進みます。
すべてが含まれるディレクトリに配置されます
コントローラーボット。これは私が書いたC ++プログラムです。コントローラボットのソースコードはこちらでご覧いただけます。コントローラーに合わないものがあれば、教えてください。
instructions.txt
このファイルという名前のテキストファイルは次のようになります。[Total number of bots that are competing] [bot1Name] [bot1 command to run] [bot2Name] [bot2 command to run] ...
各ボットのフォルダー。このフォルダーには、プログラム(スクリプトまたはバイナリ)と
data.txt
、ボットが必要なものを読み書きできるテキストファイルが1つ含まれます。
技術仕様とルールの説明
フォルダー内以外の場所から何かを読み書きしようとするボットは、ゲームから追い出されます。
プログラムは、Yosemiteを実行しているMacbookで実行できる必要があります。現在サポートされている言語は、python(2.7.9および3.4.2)、C / C ++、objective-C、perl、ruby、bash、PHP、Java、C#、javascript、およびHaskellです。もっとたくさんありますが、これらは私が今考えることができるものです。時間が経つにつれて、さらに追加していきます。特定の言語で競争したい場合は、私にメッセージを送るかコメントしてください。可能な場合はリストに追加します。
ボードが勝ったが、まだスペースがある場合、あなたはまだオープンスポットのいずれかに移動することはできません。
提出の作業ディレクトリは、ボットを含むディレクトリではなく、コントローラーと他のすべてのボットを含むディレクトリになります。
コントローラーボットコードと一緒に、適切なコマンドをコンパイルして(該当する場合)実行し、ボットを実行してください。これのほとんどは、Linux端末にかなり似ているOS X端末から行われます。
ボットは1秒以内に完了する必要があります。残念ながら、コントローラーボットにタイマーを追加するのに十分な能力はありません。ただし、ボットの時間を手動で調整します。
結果!
まあ、私は正しかった。masterBoardがいっぱいかどうかを確認するためにコントローラーボットをチェックするのを忘れました。masterBoardがいっぱいの場合、すべての移動は無効になりますが、ボットを呼び出し続けます。これが、おそらく非常に多くの無効な移動があった理由です。今すぐ修正しました。以下は、すべてのボットの最新バージョンでの公式結果です。
Bot 1, goodRandBot, has 1 wins and made 0 illegal moves, for a total of 133 points.
Bot 2, naiveBot, has 3 wins and made 48 illegal moves, for a total of 361 points.
Bot 3, depthBot, has 5 wins and made 0 illegal moves, for a total of 664 points.
Bot 4, middleBot, has 1 wins and made 20 illegal moves, for a total of 114 points.
With 4 bots, This program took 477.471 seconds to finish.
Depth Botは現チャンピオンです!少なくとも、今のところ。
XXX000---
に送信されますか?または、「Oが最初に勝ったにもかかわらず、誰もそれを手に入れない」ということですか?