注:このコンテストの勝者はJack !!!です。これ以上の提出は受け付けられません。
ここに、この王様の挑戦のためのチャットルームがあります。これは私の最初のものですので、私は提案を受け入れています!
死神は、忍耐と欲を含む問題解決の技術によって開発されたゲームのコンセプトです。KOTHスタイルのコンテストに合うようにゲームを修正した後(提案と改善について@NathanMerrillと@dzaimaに感謝します)、ここに課題があります。
ゲームは次のように機能します。ティックごとに特定の定数で乗算するReapと呼ばれる値があります。各ティックの後、各ボットには「リーピング」オプションがあります。つまり、Reapの現在の値をスコアに追加し、Reapを1に減らします。
ただし、ボットが「リープ」の間に待機しなければならない固定数のティックと、ゲームに勝つために必要な固定数のポイントがあります。
簡単ですか?入力は次のとおりです。
I / O
Python 3で3つの入力を取る関数を作成します。1つはself
、クラスオブジェクトの参照に使用されます(後述)。2つ目は、Reap
「刈り取る」場合に獲得する刈り取りの現在の値です。3つ目はprevReap
、前のティックで獲得したボットのリストです。
関数でアクセスできる他のオブジェクト:
self.obj: An object for your use to store information between ticks.
self.mult: The multiplier that Reap is multiplied by each tick
self.win: The score you need to win
self.points: Your current set of points
self.waittime: The amount of ticks that you must wait between reaps during the game
self.time: The number of ticks since your last reap
self.lenBots: The number of bots (including you) in the game.
self.getRandom(): Use to produce a random number between 0 and 1.
あなたはしなければならないため除いて、これらのオブジェクトの内容を編集ませんself.obj
。
1
刈り取るには出力する必要があり、刈り取るには他の何か(または何もない)が必要です。十分なティックを待たずに刈り取った場合、刈り取ったことを無視することに注意してください。
ルール
私が使用するパラメータはwinning_score=10000
、multiplier=1.6-(1.2/(1+sqrt(x)))
、waittime = floor(1.5*x)
ここでx
ケートにおけるボットの数です。
- プレイヤー(または複数)が勝利スコアに達すると、ゲームは終了します。
- 複数のボットが一度に刈り取りを要求すると、より長く待機したボットに優先順位が与えられます(同数の場合、最大時間待機したボットはすべて刈り取りでポイントを獲得できます)
- ボットは、5ティックにわたって平均で100ミリ秒以内である必要があります。
- ライブラリをインポートする場合は、お問い合わせください!Pythonのデスクトップバージョンで実行できるライブラリを追加しようとします(数学は既にインポートされています:自由に使用してください)
- 重複ボット、1アップボットなど、KoTHのすべての標準的な抜け穴も同様に禁止されています。
- 任意の種類のランダム性を使用するボット
getRandom
は、提供された機能を使用する必要があります。
以下のTIOリンクでコントローラーを見つけることができます。これを使用するには、関数の名前をBotList
文字列として追加し、関数をコードに追加します。変更multiplier
、修正どの各目盛りを乗じてシェムリ変更するにはwinning_score
ゲームを終了する必要があるスコア内容を変更すると、変更waittime
収獲の間に待機するダニの数を変更します。
あなたの便宜のために、ここにいくつかのサンプル(そしてかなり馬鹿げた)ボットを示します。これらに類似したボットの送信は許可されません。ただし、コントローラーがどのように機能するかを示しています。
def Greedybot(self,Reap, prevReap):
return 1
def Randombot(self,Reap, prevReap):
if self.obj == None:
self.obj=[]
self.obj.append(prevReap)
if self.getRandom()>0.5:
return 1
興味のある方のために、ここでのコントローラは、それに組み込まれた15回の応募である:オンラインそれをお試しください
最終結果
うーん、最終的にここにあります!上記のTIOリンクをチェックして、最終順位を生成するために使用したコードを確認してください。結果はそれほど興味深いものではありません。さまざまなランダムシードを使用して1000回実行した結果、
1000 wins - Jack
0 wins - everyone else
バウンティ勝者のジャック、おめでとうございます!! (別名@Renzeee)
len(BotList)
か?
25
プレイ中のボットに基づいて説明で行ったのではなく、ボット自体で実際の計算を行います。ただし、最初に他の人のボットを見るのも少し待ちます。Rushabh Mehta、すべてのボットが実行され、勝者が決定される期限/最終日はありますか?