sheesh、これは本当に4番目ですか?昔からのすべての人にとって、中心的な課題は同じですが、カスタム言語の代わりにJavaを使用しています。興味のある方のために、過去3つの CodeBot チャレンジをご紹介します。
CodeBotsの目標は、ボットをできるだけバイラルにすることです。各ボットには旗があり、旗がどこにでもあることを確認する必要があります。
API
ボットは標準化された「プロトコル」に従い、ボットは以下のステップを同期的に進行します。
IPAddress selectMessageRecipient()
ボットが「フレンドリ」メッセージの送信先を選択できるようにします。Message sendMessage()
ボットが送信するメッセージの内容を選択できるようにします。processMessage(IPAddress, Message)
ボットが受信するメッセージごとに呼び出されます。FunctionType selectFunctionToBlock()
現在のターンで関数が上書きされるのをブロックします。手順7を参照してください。IPAddress selectAttackTarget()
ボットがDDOSを希望するユーザーを選択できるようにします。ボットが同時に3つのボットの標的になっている場合、DDOS攻撃は成功します。攻撃が成功した場合、各攻撃者はステップ6および7を実行できます。readData(ReadonlyBot)
ボットが脆弱なボットに保存されているデータを読み取れるようにします。FunctionType selectFunctionToReplace()
この挑戦の核心です。1つの機能(ここにリストされている8つのうち)を選択して、ボットからボットにコピーできます。その後、関数はtheirsの代わりに呼び出されます。複数のボットが同じ機能を選択した場合、ランダムなボットが成功します。String getFlag()
はゲームの終了時に呼び出され、送信に固有の文字列を返す必要があります。関数は常に同じ文字列を返す必要があります。ゲームの最後に最も多くのフラグが付いた提出が勝ちです。
ストレージ
ストレージには、AddressBook、Log、Variablesの 3つの形式があります。 これらの形式のストレージは、関数が実行されているボットに対してローカルです(関数がコピーされた場合、これらの各オブジェクトの内容は異なります)。これらのオブジェクトはすべて、手動で変更または消去できます。これらのオブジェクトを取得するには、クラスにゲッターがあります(例:)getLog()
。
アドレス帳は、リストに格納たIPAddressと、各AddressTypeにあなたがアドレスの種類を分類することができます。 AddressBookには常に少なくとも1つのアドレスが含まれます(クリアされた場合、ランダムなアドレスが追加されます)。アドレス帳をクリアして複数のIPアドレスを取得するは許可されていません。
ログはすべて実行されたアクションだけでなく、行動に関するデータのリストを格納します。また、成功したすべての攻撃の履歴も含まれます(ただし、どの機能が上書きされたかはわかりません)
変数オブジェクトを使用すると、文字列の名前に接続文字列変数を格納することができます。ゲームの開始時に、変数には単一の変数が含まれますID
。これには、ボットタイプに固有のランダムに生成されたIDが含まれます。
他のアクセス機能もあります。
int getTurnNumber()
現在のターンの整数を返しますbool functionsMatch(ReadonlyBot, FunctionType)
ReadonlyBotの関数があなたのものと一致するかどうかをテストしますIPAddress personalAddress()
あなたのIPアドレスを返します
実装方法
- Githubからコードを入手できます
- ボットを
\bots
フォルダーに追加してから、ボットへの参照を追加しますcontroller\CodeBotFactory.java
- ボットを拡張する
codebots.bot.CodeBot
か、codebots.bots.DefaultCodeBot
- コントローラーを実行する場合は、Java 8が必要です。
- コンパイル
/src
してjavac codebots\*.java
から実行することで、コードを実行できます(フォルダー内にいる場合)java codebots.Main
。 - あなたは可能持たない任意の非定数メンバ変数を自分のクラスで
- 反射は許可されていません。
- 上記の方法以外の(同じまたは異なるタイプの)ボット間の通信形式は許可されません。
- ダムボットおよび/または自殺ボットは許可されますが、すべてのボットは既存のエントリと機能的に異なる必要があります。
- ボットにランダム性が必要な場合は、
getRandom()
- コードを効率的に保つようにしてください。コントローラーのプロファイリングと高速化にかなりの時間を費やしました。
スコア
105.2501 Expelliarmus!
104.5803助けています!
104.2746私は誰ですか?
103.8529
ダムボット103.2028代替品
102.7045カオス
102.4046隠者ボット
102.2849スマーマー
100.5598ランダムボットはあなたを愛しています
99.966
99.0185 codebots.bots.DefaultCodeBot
91.2942 codebots.bots.MarkedBot
91.1423友好的な近所のメール配信ロボット。
89.4645 null