非対称KOTH:猫を捕まえる
UPDATE: Controller.javaが例外(エラーのみ)をキャッチしなかったため、gistファイルが更新されます(新しいサブミッションを含む)。現在、エラーと例外をキャッチし、それらも出力します。
このチャレンジは2つのスレッドで構成されています。これはキャッチャースレッドです。catスレッドはここにあります。
これは非対称のKOTHです。各サブミッションは猫またはキャッチャーです。それぞれの猫とキャッチャーの各ペアの間にゲームがあります。猫とキャッチャーは別々のランキングを持っています。
キャッチャー
六角形のグリッドに猫がいます。あなたの仕事は、できるだけ早くそれをキャッチすることです。猫がそこに行くのを防ぐために、毎ターン、1つのグリッドセルに水バケツを置くことができます。しかし、猫は(おそらく)愚かではなく、バケツを置くたびに、猫は別のグリッドセルに移動します。グリッドは六角形であるため、猫は6つの異なる方向に進むことができます。あなたの目標は、猫を水バケツで囲むことです。
ネコ
あなたは、キャッチャーがあなたの周りに水バケツを置くことによってあなたを捕まえたいことを知っています。もちろん、あなたは逃げようとしますが、あなたが怠catな猫であるように(猫はそうです)、あなたはまさにその時一歩を踏み出します。つまり、同じ場所に滞在することはできませんが、周囲の6つのスポットのいずれかに移動する必要があります。キャッチャーが新しいバケツを置いたのを見るたびに、別のセルに行きます。もちろん、できるだけ長く回避しようとします。
グリッド
グリッドは六角形ですが、六角形のデータ構造がないため、11 x 11
正方形の2D配列を取り、猫が6方向にしか移動できない六角形の「動作」を模倣します。
トポロジはトロイダルです。つまり、アレイの「外側」のセルを踏むと、アレイの反対側の対応するセルに転送されます。
ゲーム
猫はグリッドの指定された位置から始まります。キャッチャーは最初の動きをすることができ、猫とキャッチャーは猫が捕まるまで交互に動きます。ステップ数は、そのゲームのスコアです。猫は可能な限り大きなスコアを取得しようとし、キャッチャーは可能な限り低いスコアを取得しようとします。参加したすべてのゲームの平均合計が提出のスコアになります。猫用とキャッチャー用の2つの別々のランキングがあります。
コントローラ
指定されたコントローラーはJavaで作成されています。キャッチャーまたは猫として、それぞれJavaクラスを実装し(既にいくつかの基本的な例があります)、players
パッケージに配置する必要があります(コントローラークラスの猫/キャッチャーのリストを更新します)。そのクラス内の追加機能。コントローラーには、単純なcats / catcherクラスの2つの実例がそれぞれ付属しています。
フィールドは、セルの現在の状態の値を格納する11 x 11
2D int
配列です。セルが空の場合は値0
があり、猫がいる場合は値-1
があり、バケットがある場合はがあり1
ます。
あなたが使用できるいくつかの特定の機能がありますisValidMove()
/ isValidPosition()
あなたの移動(猫)/位置(キャッチャー)が有効であるかどうかをチェックするためのものです。
自分の番になるたびに、関数takeTurn()
が呼び出されます。引数は次のような方法がある現在のグリッドのコピーが含まread(i,j)
でセルを読み出すために(i,j)
、だけでなく、isValidMove()/ isValidPosition()
あなたの答えの妥当性をそのチェックを。これは、トロイダルトポロジのラッピングも管理します。つまり、グリッドが11 x 11のみの場合でも、セル(-5,13)にアクセスできます。
このメソッドはint
、可能な動きを表す2つの要素の配列を返す必要があります。猫の場合、これらは{-1,1},{0,1},{-1,0},{1,0},{0,-1},{1,-1}
猫が行きたい場所の相対的な位置を表し、キャッチャーはバケツを置きたい場所の絶対座標を返します{i,j}
。
メソッドが無効な移動を生成する場合、提出は失格となります。移動先がすでにバケットであるか、移動が許可されていない/移動先が既に占有されている場合(猫として)、またはバケット/猫が既に存在する場合(キャッチャーとして)、移動は無効と見なされます。あなたは、与えられた関数で事前にそれをチェックすることができます。
あなたの提出は合理的に速く動作するはずです。メソッドが各ステップで200ミリ秒以上かかる場合、失格となります。(できればもっと少ない...)
プログラムは、ステップ間で情報を保存できます。
提出
- 必要な数だけ提出できます。
- 既に提出した提出物を大幅に変更しないでください。
- 新しい回答の各提出をお願いします。
- 各提出には、できれば一意の名前を付ける必要があります。
- 提出物は、クラスのコードと、提出物がどのように機能するかを示す説明で構成される必要があります。
<!-- language: lang-java -->
自動構文強調表示を得るために、ソースコードの前に行を書くことができます。
得点
すべての猫はすべてのキャッチャーと同じ回数だけ競争します。現在のスコアを頻繁に更新するようにします。アクティビティが減少したときに勝者が決定されます。
この挑戦はこの古いフラッシュゲームに触発されています
テストと建設的なフィードバックを提供してくれた@PhiNotPiに感謝します。
現在のスコア(ペアリングごとに100ゲーム)
Name Score Rank Author
RandCatcher 191674 8 flawr
StupidFill 214246 9 flawr
Achilles 76820 6 The E
Agamemnon 74844 5 The E
CloseCatcher 54920 4 randomra
ForwordCatcher 94246 7 MegaTom
Dijkstra 46500 2 TheNumberOne
HexCatcher 48832 3 randomra
ChoiceCatcher 43828 1 randomra
RandCat 77928 7 flawr
StupidRightCat 81794 6 flawr
SpiralCat 93868 5 CoolGuy
StraightCat 82452 9 CoolGuy
FreeCat 106304 3 randomra
RabidCat 77770 8 cain
Dijkstra's Cat 114670 1 TheNumberOne
MaxCat 97768 4 Manu
ChoiceCat 113356 2 randomra