将来的にはタイムトラベル(TT)が一般的になりますが、コイン投げは深刻な精神スポーツになります。将来に備えて、エントリーの観点から実際に時間旅行が行われるプログラムのコンテストを作成します。
競争は、Javaクラス間のコイン投げ試合で構成されるラウンドロビンスタイルのキングオブザヒルです。
コイン投げのルール
- 2人のプレイヤーと100ラウンドがあります。
- ラウンドごとにコインが投げられ、その結果に基づいてプレイヤーの1人が1ポイントを獲得します。各プレイヤーは50%の確率でポイントを獲得できます。
- 投げた後、両方のプレイヤーはレバーを引いて時間を制御する機会があります。
- 青色のレバー(ストッパーを元に戻す)を引くと、レバーが使用されたラウンドまたはそれ以前のラウンドではTTを使用できません。TTがこれらのラウンドに行こうとしても効果はありません。
- 赤いレバー(リバーター)を引くと、時間を元のラウンドに戻そうとします。成功した場合、対戦相手の記憶は、選択されたラウンドの前に記憶に戻され、選択されたラウンドから始まるコイントスの結果も削除されます。TTに関して対戦相手に可能な唯一の兆候は、元に戻されない未使用のレバーの数です。
- 各プレイヤーには、試合開始時に5個の青と20個の赤の未使用レバーがあります。これらのレバーはTTの影響を受けません。
- 100ラウンドの終了時にTTが発生しない場合、ゲームは終了し、スコアの高いプレイヤーが勝ちます。
詳細
- ラウンドには1から始まるインデックスがあります(フォーム1から100)。
- ラウンドの前に
x
、利用可能な青と赤のレバーの数が提供され、コインが投げられるまでx
(最後を含む)、最後のx-1
ラウンドのメモリがトスされます。 - ラウンドで青色のレバーを引くと、
x
ラウンドx
前またはラウンド前に目的地があるTTが停止します(同じ正確なラウンドでもTTがブロックされる)。 - ラウンドに戻す
x
ことは、次のラウンドがラウンドになることを意味しx
ます。 - 両方のプレイヤーがラウンドの終わりに復帰することを選択した場合、時間はブロックされていない以前の目的地に戻ります。この時間に戻ろうとしたプレーヤーは記憶を保持します。
技術的な詳細
- 提供されたBotインターフェイスを実装するJavaクラスを作成する必要があります。
- ボットをプロジェクトに追加します。
Bot
ファイルのにボットのインスタンスを追加しますController.java
。- クラスは、呼び出し間で情報を保持するべきではありません。(ほとんどの場合
final
、関数の外部に変数のみがあると、この要件が満たされます。) memory
返されたAction
オブジェクトのフィールドでコントローラーに情報を提供できます。TTが発生しなかった場合、これは次のターンに返されます。TTが発生した場合、対応する以前のメモリを受け取ります。- クラスの
totalScore()
メソッドを使用してGame
、履歴文字列のスコアを取得できます。
プロトコル
毎回、
takeTurn(...)
メソッドは5つの引数で呼び出されます。- 未使用の青いレバーの数
- 未使用の赤いレバーの数
- コイン投げの履歴、1と0で構成される文字列は、前のラウンドでの勝敗を示します。最初のキャラクターは、最初のコイン投げに対応しています。(最初のラウンドでは、文字列の長さはになります
1
。) - 文字列、前のラウンドで保存されたメモリ
- このラウンドの1から始まるインデックス
毎回、メソッドは以下
Action
を含むオブジェクトを返しますmove
アクションを説明するフィールドの整数:0
何もしない-1
青いレバーを引いて、TTがこのラウンドを通過するのをブロックしますx
赤いレバーを引いてラウンドに戻ろうとする現在のラウンドよりも大きくない正の整数x
- 無効な整数はとして扱われ
0
ます。
保存したいこのラウンドのメモリを含む文字列。メモリの保存は、チャレンジの重要な部分ではないことに注意してください。文字列に有用なデータを保存せずに、適切なエントリを作成できます。最初のラウンドでは、文字列は空の文字列になります。
あなたの方法は、試合の平均でラウンドごとに10ミリ秒以上かかることはありません。
- 定期的に時間制限に違反すると、失格となります。
得点
- 試合に勝つと2ポイントが得られ、引き分けは両方のプレイヤーに対して1ポイントを獲得します。損失はポイントを獲得しません。
- ボットのスコアは、収集したポイントの総数になります。
- 競技者の各ペア間でプレイされる試合の数は、エントリーの数とスピードに依存します。
2つの簡単なボットの例が回答として投稿されています。
コントローラーと最初のカップルのボットはこちらから入手できます。
11月3日までに送信されたボットのテスト結果:
合計スコア:
Oldschool: 3163
Random: 5871
RegretBot: 5269
Nostalgia: 8601
Little Ten: 8772
Analyzer: 17746
NoRegretsBot: 5833
Oracle: 15539
Deja Vu: 5491
Bad Loser: 13715
(コントローラーは、Cat catcherチャレンジのコントローラーに基づいています。@ flawrがこのコントローラーのベースとして提供してくれてありがとう。)
ボーナス:同様のコンセプトに基づいた6分間の素敵な映画。
If you pull a blue lever (revert stopper) no TT is possible to the round the lever was used or any earlier round anymore. TT's attempting to go to these rounds will have no effect.
If you pull a blue lever (revert stopper) no TT is possible through that round anymore. TT's attempting to go through the round will have no effect.
「ラウンドを通過する」とは何ですか?