点のリストが与えられたら、すべての点を訪れて開始点に戻る最短経路を見つけます。
巡回セールスマン問題として計算/それを近似する多くの方法があり、コンピュータサイエンスの分野ではよく知られています。非常に大きなポイントのグループについては解決されていますが、最大のもののいくつかは完了するまでに多くのCPU年を要します。
じゃがいもに火傷しないでください。
Hot Potatoは、2人以上のプレーヤーが音楽を再生しながら「じゃがいも」を一周するゲームです。オブジェクトは、次のプレーヤーにすばやく渡すことです。音楽が停止したときにジャガイモを保持している場合、あなたは外出している。
Hot Potato Salesmanのオブジェクトは次のとおりです。
100個の一意のポイントのセットが与えられた場合、それらのポイントをより良い順序で返します(さらに下に定義されているように短い合計距離)。これにより、問題は次のプレーヤーに「渡されます」。彼らはそれを改善し、次のようにそれを渡す必要があります。プレーヤーがそれを改善できない場合、彼らは外に出て、一人のプレーヤーが去るまでプレイを続けます。
これが「総当たり戦」の競争にならないようにするために、次の規定があります。
ジャガイモを渡すのに1分以上かかることはありません。1分が経過するまでに短い解決策を見つけて合格しなかった場合は、外出します。
25ポイントを超える位置は変更できません。正確には、
>= 75
ポイントは受け取った位置と同じでなければなりません。どちらを変更するかは問題ではなく、変更する量だけです。
プレイヤーが1人しか残っていない場合、そのプレイヤーがそのゲームの勝者となり、1ポイントを獲得します。トーナメントは5*n
ゲームで構成されn
ます。ここで、プレイヤーの数です。各ゲーム、開始プレイヤーが回転し、残りのプレイヤーの順番がシャッフルされますます。最後にポイントが最も多いプレイヤーがトーナメントの勝者です。トーナメントが1位タイで終了した場合、新しいトーナメントはそれらの競技者のみでプレイされます。同点がなくなるまでこれが続きます。
各ゲームの開始プレーヤーは、特定の順序で疑似ランダムに選択されたポイントのセットを受け取ります。
ポイントはx,y
、デカルトグリッド上の整数座標のペアとして定義されます。距離は、マンハッタン距離を使用して測定され|x1-x2| + |y1-y2|
ます。すべての座標は[0..199]
範囲内にあります。
入力
入力は単一の文字列引数で与えられます。現在のプレイヤー数(m
)と100ポイントを表す201個のコンマ区切り整数で構成されます。
m,x0,y0,x1,y1,x2,y2,...,x99,y99
これらのポイントの順序は現在のパスです。合計距離は、各ポイントから次のポイントまでの距離を加算することによって取得されdist(0,1) + dist(1,2) + ... + dist(99,0)
ます()。合計距離を計算するときは、開始することを忘れないでください!
でm
はないことに注意してくださいゲームを開始したプレイヤーの数で、まだ参加しているプレイヤーの数で。
出力
出力は入力と同じ方法でマイナスで与えられm
ます。新しい順序でポイントを表すコンマ区切りの整数を含む単一の文字列。
x0,y0,x1,y1,x2,y2,...,x99,y99
制御プログラムは、1分間だけ出力を待機します。出力を受信すると、次のことを確認します。
- 出力は整形式です
- 出力は、から構成のみ及び全ての入力で100点、本
>=75
ポイントは元の位置にあります- パスの長さが前のパスより短い
これらのチェックのいずれかが失敗した(または出力がなかった)場合、あなたは退出し、ゲームは次のプレイヤーに進みます。
制御プログラム
このリンクで制御プログラムを見つけることができます。制御プログラム自体は決定論的であり、ダミーのシードとともに投稿されます1
ます。スコアリング中に使用されるシードは異なるため、吐き出す順番やポイントのリストを分析しようとしないでください。
メインクラスはTourney
です。これを実行すると、引数として与えられた競技者との完全なトーナメントが行われます。それは各ゲームの勝者と最後に集計を吐き出します。2つのSwapBotを使用したサンプルトーナメントは次のようになります。
Starting tournament with seed 1
(0) SwapBot wins a game! Current score: 1
(1) SwapBot wins a game! Current score: 1
(1) SwapBot wins a game! Current score: 2
(1) SwapBot wins a game! Current score: 3
(0) SwapBot wins a game! Current score: 2
(1) SwapBot wins a game! Current score: 4
(1) SwapBot wins a game! Current score: 5
(1) SwapBot wins a game! Current score: 6
(1) SwapBot wins a game! Current score: 7
(1) SwapBot wins a game! Current score: 8
Final Results:
Wins Contestant
2 (0) SwapBot
8 (1) SwapBot
一度に1つのゲームのみをテストする場合は、Game
代わりにクラスを実行できます。これにより、引数として指定された順序でプレイヤーと1つのゲームが実行されます。デフォルトでは、現在のプレーヤーとパスの長さを示す再生モードも出力します。
また、付属いくつかのテストプレイヤーは、次のとおりですSwapBot
、BlockPermuter
とTwoSwapBot
。最初の2つはスコアリングの実行に含まれないため、テスト中にそれらを自由に使用して悪用してください。TwoSwapBot
意志判断に含まれており、彼はそう、あなたのA-ゲームを持って、何も前かがみませんこと。
その他
状態情報を保存することはできず、各ターンはプログラムの個別の実行です。各ターンで受け取る唯一の情報はポイントのセットです。
外部リソースは使用できません。これには、ネットワークコールとファイルアクセスが含まれます。
TSP問題またはその変形を解決/支援するために設計されたライブラリ関数は使用できません。
他のプレイヤーを操作したり、干渉したりすることは一切できません。
制御プログラムまたは含まれているクラスやファイルを操作したり、干渉したりすることは一切できません。
マルチスレッドが許可されています。
ユーザーごとに1つのサブミッション。複数のエントリを送信する場合、最初に送信されたエントリのみを入力します。提出物を変更する場合は、オリジナルを編集/削除してください。
トーナメントは、Ubuntu 13.04、i7-3770K CPUおよび16GB RAMを搭載したコンピューターで実行されます。VMでは実行されません。悪意があると私が感じるものは、あなたが提出した現在および将来のエントリを直ちに失格させます。
すべてのエントリは、無料の(ビールのように)ソフトウェアを使用してコマンドラインから実行できる必要があります。エントリのコンパイル/実行で問題が発生した場合は、コメントに支援を求めます。応答しない場合、または最終的に実行できない場合は、失格となります。
結果(2014年5月22日)
新しい結果があります!UntangleBotは競合他社をかなり健全に打ち負かしました。TwoSwapBotは7つの勝利を管理し、SANNbotも勝利を収めました。スコアボードと生の出力へのリンクは次のとおりです。
Wins Contestant
22 (2) ./UntangleBot
7 (0) TwoSwapBot
1 (5) SANNbot.R
0 (1) BozoBot
0 (3) Threader
0 (4) DivideAndConquer
現状では今、UntangleBotはチェックマークを獲得しました。ただし、参加者が出てきたらトーナメントを開催し、それに応じて受け入れられる答えを変更するので、入場を妨げないでください。