非対称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 191962 8 flawr
StupidFill 212688 9 flawr
Achilles 77214 6 The E
Agamemnon 74896 5 The E
CloseCatcher 54776 4 randomra
ForwordCatcher 93814 7 MegaTom
Dijkstra 47558 2 TheNumberOne
HexCatcher 48644 3 randomra
ChoiceCatcher 43834 1 randomra
RandCat 77490 9 flawr
StupidRightCat 81566 6 flawr
SpiralCat 93384 5 CoolGuy
StraightCat 80930 7 CoolGuy
FreeCat 106294 3 randomra
RabidCat 78616 8 cain
Dijkstra's Cat 115094 1 TheNumberOne
MaxCat 98400 4 Manu
ChoiceCat 113612 2 randomra
main.Controller
、呼び出しgetCatchers()
、シミュレート/妨害することを防ぐものは何takeTurn
ですか?