親切な隣人のドクターツリーから、コデモンと呼ばれる3匹の魔法の生き物が渡されました。近くのカラービルの町でバトルトーナメントがあります。誰もいない最高のあなたですか?
概要
これはバトルトーナメントです。各プレイヤーは3匹のモンスターのチームをコントロールし、目的は他のチームをノックアウト(キル)することです。100ラウンドあり、勝ちと引き分けのポイントが与えられます。最もポイントの多いチームが勝ちます!
モンスター
コデモンは複雑な小さな生き物です。選択できる5つのタイプ(要素)、3つの統計、およびそれぞれに3つの移動スロットがあります。
タイプ
各Codémonには1つのタイプが割り当てられます。5つのタイプは、ノーマル、サイキック、ファイア、ウォーター、およびグラスです。それぞれに長所と短所があります。損傷は次のチャートに基づいています。
数字はダメージ乗数です。たとえば、水を攻撃する火には0.5の修正(半分のダメージ)がありますが、グラスを攻撃する火は2倍になります(2)。
統計
各モンスターには、戦闘能力を決定する3つの統計があります。攻撃は、与えるダメージを増加させます。防御は、受けるダメージを減らします。速度により、速度の低いユーザーの前に移動できます。
各モンスターの開始値は、各ステータスごとに50で、最大100です。モンスターを作成すると、80個の追加のステータスポイントを割り当てることができます(それぞれ)。個々の統計が100を超えることはできないことを忘れないでください。したがって、100/80 / 50、90 / 80/60、または65/65/100の分布を持つことができますが、120/50/60は違法です。違法な統計情報を持つチームは失格となります。80ポイントすべてを使用する必要はありませんが、おそらく最低50/50/50を使用すべきではありません。
HPを統計と見なすこともできますが、各Codémonには変更不可の100 HPがあります。HPがゼロになると、戦闘を続けることができなくなります。HPは各戦闘の前に100に補充されます。
動き
各モンスターは3つの戦闘の動きを知っています。選択された3つは異なる必要があるため、パンチ/パンチ/パンチはありません。
15の動きがあり、それぞれ3種類です。各タイプには、直接攻撃、効果のある弱い攻撃、および唯一の効果の移動があります。
id name type power uses usable effect
0 Punch N 20 - NFWG
1 Heal N 0 3 NFWG Heals 50 HP
2 Slow N 10 5 NFWG Enemy speed x0.8
3 Pain P 20 - PFWG
4 Sleep P 0 3 PFWG No enemy action until wake
5 Weaken P 10 5 PFWG Enemy Atk x0.8
6 Fireball F 20 - NPFW
7 Burn F 0 3 NPFW Enemy -10 HP each turn
8 Sharpen F 10 5 NPFW Own Atk x1.25
9 Watergun W 20 - NPWG
10 Confuse W 0 3 NPWG Enemy may strike itself (10 power)
11 Shield W 10 5 NPWG Own Def x1.25
12 Vine G 20 - NPFG
13 Poison G 0 3 NPFG Enemy -5xTurns HP each turn
14 Sap G 10 5 NPFG Enemy Def x0.8
type
移動のタイプを指します。power
その顕著な力です。uses
戦闘ごとに使用できる回数を示します(-
無制限)。usable
どのタイプで使用できるかを示します(たとえば、PunchはPsychicタイプには与えられないため、付与されませんP
)。effect
動きが持つ影響を示します。常に機能するヒールを除き、各エフェクトが機能する確率は75%です。
モンスターのステータスを変更するエフェクトの場合、エフェクトがスタックされる場合があります。たとえば、ウィーケンを2回使用すると、相手の攻撃力が0.64に低下する場合があります。モンスターのステータスを変更しないエフェクト(スリープ、バーンなど)はスタックしません。
スリープは相手をスリープ状態にし、各ターンの開始時に60%の確率で目を覚ます。眠っているモンスターは何もしません。
火傷はアクティブな場合、各ターンの終わりに10 HPのダメージを相手に与えます。毒も同様に機能しますが、ターンごとに量が増えます。最初のターンでは、それは5であり、その後はターンごとに5を獲得します。そのため、4ターン目までに20のダメージを与えます。これらは、モンスターのタイプの影響を受けたり、ボーナスの対象にならない、フラットなダメージです。
混乱は、指示されたとおりに行うのではなく、モンスターを攻撃させる可能性があります。この攻撃のパワーは10で、特定のターンに30%の確率で発生します。
明確にするため、効果は戦闘終了まで続きます(上記のスリープを除く)。
移動は、対応するタイプのモンスターが使用すると、パワーが20%増加します。たとえば、Vineを使用するGrassモンスターはブーストされますが、Punchを使用するモンスターはブーストされません。
秘密の統計
各モンスターの統計とタイプ(ただし動きはありません)は公開されています。対戦相手は、最善のアクションを選択するために、彼らが戦っているものを見ることができます。ただし、非表示のボーナスも利用できます。
具体的には、2戦ごとに、チームのモンスターごとに1つの「ボーナス」ステータスポイントが与えられます。死んだか生きているか、勝者でも敗者でも、すべてのモンスターにポイントが与えられます。これは、選択した3つの統計のいずれかに割り当てることができます。1つのモンスターにスタックすることはできません。各モンスターは毎回1つを取得します。これらのポイントは、100の制限の影響を受けません。100回の戦闘ラウンドがあるため、これにすべてのボーナスを割り当てた場合、149までの単一のステータスを取得できることを意味します。繰り返しになりますが、対戦相手はあなたの「ベース」統計のみを見るので、トーナメントに行くほど、知識は真実から離れていきます。
戦い
戦闘は3チームで行われ、各チームで1つずつアクティブになります。開始時に、対戦相手のチームが表示され、どのモンスターを最初の「アクティブ」プレイヤーにするかを選択するよう求められます。
その後、次の手順でターンが行われます。
- 切り替え:必須のモンスター切り替えが行われます(ある場合)
- バトルアクションを選択する
- スイッチ:オプションのモンスタースイッチ(戦闘アクションとして選択)が実行されます
- 睡眠チェック:睡眠から目覚めるチャンス
- 攻撃1:可能であれば、より速いモンスターは選択した動きを使用します
- 攻撃2:可能であれば、他のモンスターは選択した動きを使用します
- 効果ダメージ:生きているモンスターに火傷/毒ダメージを与える
「より高速」とは、より高速のモンスターを意味します。両方の速度統計が同じ場合、毎ターンPRNGコインフリップで選択されます。
アクティブなモンスターが死亡するターンの終わりに、新しいアクティブを選択するように求められます。また、アクティブモンスターを任意のターンの移動として切り替えることもできます(複数の生き物がいる場合)。繰り返しになりますが、あなたが自分の動きとして切り替えると、そのターンに戦闘の動きをすることはありません。
非アクティブの場合、モンスターは「処理」されません。これは、火傷/毒によるダメージ、毒カウンターの蓄積、睡眠からの覚醒などが発生しないことを意味します。切り替え時に効果が除去または変更されることはありません。これは他のモンスターと戦うゲームではありません。攻撃を上げて燃やした状態でスイッチアウトした場合、再びスイッチインしてもそこにいます。
効果的なダメージは、アクティブな敵を殺すかどうかに関係なく起こります。このようにして、両方のチームのメンバーが1ターンで死亡する場合があります。
あるチームが使用可能なモンスターを使い果たすと、彼らは負けます。両方のチームが同じターンで不足した場合、それは同点です。戦闘が1000ターン続くと、引き分けになります。
損傷を判定する公式は次のとおりです。
floor((effAttack / effDefense) * movePower * typeMultiplier * moveBoost)
effAttack
そして、effDefense
している効果的なモンスターの統計情報。効果的な攻撃は、攻撃とボーナス攻撃を追加し、効果が変化した場合に(0.8または1.25)を掛けることで得られます。これらの効果は積み重ねられる可能性があることに注意してください。
ダメージは、タイプ修飾子が0(通常<->サイキック)またはムーブのパワーが0(ヒール、バーンなど)の場合にのみ0になります。それ以外の場合、最小値は1に強制されます。
トーナメント
トーナメントは100ラウンド続きます。各ラウンドで、チームはシャッフルされ、ランダムに互いにペアリングされます。チームの数が奇数の場合、残り物はバイ(同点の得点)を受け取ります。戦いに勝つとチームに2ポイントが加算され、同点は1の価値があり、損失はありません。最後にポイントが最も多いチームが勝ちます!
チームが結ばれている場合、タイブレーカーの順序を決定するために、チームだけが1位で結ばれたトーナメントが行われます。
プロトコル
コントローラは、プログラムに4つのコマンドのいずれかを送信します。最初の文字がコマンドタイプを決定し、必要に応じてデータが続きます。
プログラムはコマンドを引数として受け入れ、1秒以内にSTDOUTで応答します。STDINを聞いて生き続けないでください。各コマンドは新しいプロセスを生成します。
データ/状態をディスクに書き込むことができます。チームと同じ名前のファイルをサブフォルダーに配置します。32キロバイトを超えるデータを書き込まないでください。そうしないと失格になります。データはラウンド間で保持されますが、トーナメント間でクリアされます。
コマンド
チームデータ
これは、トーナメントの開始時にチームを登録するために一度送信されます。返信はトーナメントごとに変わらず、一定でなければなりません。
クエリ:
T
応答:
name|member0|member1|member2
name
チーム名を含む文字列です。解析を容易にするために、英数字のみを使用してください。memberN
は、各モンスターの詳細を示すメンバー文字列です。
メンバー文字列:
name:typeid:attack:defense:speed:moveid0:moveid1:moveid2
繰り返しになりますが、「名前」は文字列で、今回はこのモンスターの名前を使用しています。typeid
そのタイプです。タイプIDは、上の図に示されている順序で、Normal = 0およびGrass = 4です。
次の3つのフィールドは基本統計です。上記の統計セクションで説明されている制限に留意してください。
最後の3つは、モンスターの動きです。IDは上記の移動チャートに示されています。
チームデータの返信の例は次のようになります。
DummyTeam|DummyA:0:50:60:70:0:1:2|DummyB:0:50:60:70:0:1:2|DummyC:0:50:60:70:0:1:2
ここでごみ、不正な形式、または違法なデータを送り返すチームは、修正されるまで参加しません。
アクティブを選択
これは、各戦闘の開始時、およびモンスターが死亡し、切り替える必要があるときに送信されます。
クエリ:
C#battleState
battleState
現在の戦闘の状態を示します。ここで私と一緒に耐えてください、それはいです:
yourTeamState#theirTeamState
ここで、XteamState
次のようになります。
name:activeSlot|member0state|member1state|member2state
activeSlot
現在アクティブなモンスターを表示します(0-2)。加盟国には2つのフレーバーがあります。あなたのチームであれば、追加情報を提供します。そう、
あなたの memberXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:moveCount0:moveCount1:moveCount2:bonusAttack:bonusDefense:bonusSpeed:effectid:effectid:effectid
彼らの memberXstate:
name:id:attack:defense:speed:hp:typeid:poisonedturns:effectid:effectid:effectid
id
はを使用したくない場合にモンスターを追跡するために使用できる単なる整数識別子ですname
。
attack:defense:speed
あなたの基本統計です。
poisonedturns
毒されたターン数を教えてくれます。
moveCountX
各移動に使用した回数を示します。0の場合、使用できません。無制限の移動の場合、これはマイナスになります。
bonus(stat)
各統計に割り当てたボーナスポイントの量です。
effectid
モンスターに適用された効果の可変サイズのリストです。そこうではない末尾なる:
存在かないアクティブな効果があるかどうか、文字列に。積み重ねられた効果がある場合、それらはリストに複数の効果として表示されます。
エフェクトIDは次のとおりです。
0 NONE (should not appear, internal use)
1 POISON
2 CONFUSION
3 BURN
4 SLEEP
5 HEAL (should not appear, internal use)
6 ATTACK_UP
7 ATTACK_DOWN
8 DEFENSE_UP
9 DEFENSE_DOWN
10 SPEED_DOWN
応答:
memberSlot
必要な応答は、アクティブにするメンバーを示す単一の数字0,1,2だけです。これは戦うことができるメンバーでなければなりません。1
メンバー1が死亡した場合は返送しないでください。
バトルアクション
毎ターン、あなたは何をすべきかを決定する必要があります。
クエリ:
A#battleState
battleState
前述したように、ここで正確です。
応答:
移動を使用するには、移動先のスロットを送り返します。たとえば、スロット0にパンチを割り当てた場合、送信0
はパンチを実行します。
別のメンバーに切り替えるには、メンバーのスロットと10を送信します。したがって、メンバー2に切り替えるには、を送信します12
。
[0,1,2,10,11,12]にないものはすべて無効と見なされ、このターンにアクションは行われません。
ボーナス統計
2戦ごとに、チームメンバーごとに秘密のボーナスポイントを受け取ります。
クエリ:
B#yourTeamState
あなたのチームの状態は上に示したものと同じです。繰り返しさせてはいけません。
応答:
stat0:stat1:stat2
回答は、各チームメンバーの統計情報を増やします。攻撃は0、防御は1、速度は2です。
したがって、メンバー1の速度、メンバー2の攻撃、およびメンバー3の防御を高めるには、次のように応答します。
2:0:1
コントローラ
コントローラーはBitBucketで見つけることができます:https://Geobits@bitbucket.org/Geobits/codemon.git
コンパイル済みのクラスファイル、サブミッション、players.confをすべてフォルダーに入れて実行します。
コントローラのメインクラスはと呼ばれTournament
ます。使用法は次のとおりです。
java Tournament [LOG_LEVEL]
0〜4のログレベルは、情報を増やします。レベル0はトーナメントを静かに実行し、結果を提供します。レベル3はターンごとの解説を提供します。レベル4はデバッグ出力です。
players.conf
プログラムを実行するために必要なコマンドライン文字列を1行に1つずつ追加するだけで、トーナメントに提出物を追加できます。で始まる行#
はコメントです。
投稿に、myに追加する必要があるコマンドと、必要players.conf
なコンパイル手順を含めます。
含まれているのは、3つの通常の動きを持つすべての通常のメンバーで構成されるダミーチームです。彼らはランダムに動きを選択し、ひどい統計を持っています。楽しんでください。
その他のルール
外部リソースを読み書きすることはできません(上記のように、独自のサブフォルダー、最大32 kBを除く)。
あなたのチームはトーナメント「ブラインド」に入る必要があります。つまり、特定の状況で特定のチーム/モンスターが何をするかを把握するために、他の人のソースを分析することはできません。対戦相手の動き/統計を分析し、トーナメントの進行を追跡できますが、この情報をハードコーディングすることはできません。
他のプロセス/提出を妨げないでください。それらを呼び出したり、データを取得するためにリフレクションを使用したりしないでください。私のコンピューターを混乱させないでください。試さないでください。これは私の判断です。違反者は、今後のエントリーが禁止される場合があります。
出場者は最大2つのエントリに制限されています。さらに提出する場合は、提出された最初の2つだけを採点します。取り消す場合は、削除します。
エントリは、他のエントリをサポートするためだけに存在することはできません。また、他の競技者を間接的に失格させないでください(たとえば、これをディスクに書き込もうとするDQプレイヤーに27Mのキャラクターチーム名を使用するなど)。各提出物は、独自のメリットで勝つためにプレーする必要があります。
プログラムは、一度に最大1つの子プロセスを生成できます(直接ではなく、子孫の合計)。メインプロセスとすべての子プロセスは、出力後すぐに終了する必要があります。どちらにしても、タイムアウトを超えないようにしてください。
トーナメントは、Intel i7 3770Kプロセッサーを搭載したUbuntuを実行しているコンピューターで開催されます。
結果
これらは現在のプレーヤーの結果です。それはです非常にトップ候補との間に密接な、と私は500までのラウンド数バンピング(およびボーナスポイントの間隔が一致するように調整)を考えています。異議、コメントはありますか?
------- Final Results -------
158 Happy3Campers
157 LittleKid
71 InsideYourHead
68 HardenedTrio
46 BitterRivals
Googleドライブでの完全な実況結果
bye
、競合他社の数が不均等な場合はこれ以上は行われず、マッチペアが公平かつ均等に分散されることが保証されます。
n^2
の代わりにn
。現在の7人の競技者と100ラウンドだけで、それは2100戦です(300対現状、500ラウンドで1500)。エントリー数が増えると悪化するだけです。ラウンド数を減らすことはできますが、固有の変動性(ステータスに関しては特に)を減らすことをheし、50の倍数(ボーナスポイントの場合)を持つ方が簡単です。