前書き
あなたは何人かの召使と無人島に取り残され、宝物を探しています。長く検索するほど、より多くの宝物が見つかります。検索する人が少ないほど、一人一人が見つけます。
供給が限られているため、リーダーは、グループの4分の1までの数人が毎晩死ぬことを決定しました。彼は、事前に特定の日に死亡する人数を正確に誰にも伝えないことにしました。
あなたは5人の小さなグループを管理しており、彼らはあなたのために宝物を見つけるためにキャンプから出なければなりません。
目的
この競技の目的は、できるだけ多くの宝物を集めることです。召使いがキャンプに戻ろうとしないすべてのターンで、彼らは一定数の宝物を見つけます。あなたの召使は、異なる時間にキャンプに戻るかもしれません。
労働者が宝物を探すために外に出るたびに、労働者は宝物を見つけ1+R
ます。ここR
で、既にキャンプに戻っている(すべてのボットのうち)労働者の数です。死んだボットはこの計算に含まれません。
それぞれの日の開始時に、乱数(n
から)2
には、max(3, floor(num_live_players/4))
選択されます。(1日目の10人の選手のために、これはある2
にmax(3,50/4)=12
1日目の20人の選手のために、これは次のようになります。2
にmax(3,100/4)=25
この番号は、その日のために死ぬために残される選手の数を表します。)、およびプログラムに渡されることはありません。
使用人が最後n
に戻る人の一人である場合、彼/彼女は死に、彼/彼女が見つけた宝をあなたの所持品に移すことができなくなります。さらに、召使は残りの冒険のために宝探しに参加することはできません。
最終スコアは、冒険(コントローラーの実行)ごとに獲得した宝の平均量です。
同じスロットに空きスロットがあるよりも多くの人がキャンプに戻ることを試みた場合、誰が入場し、誰が死亡するかは乱数によって決まります。
この島での日の出から日没までの1日は30ターン続きます。夜には多くの危険な動物がいるため、日没までに帰れないということは、キャンプに入れないことを意味します。
入出力
シミュレーション全体でプログラムを実行する必要があります。
シミュレーションの開始時にINDEX I
が入力されI
ます。これは、ボットのインデックスです(このインデックスは1からカウントされます)。
それぞれの日の開始時に、START_DAY D/N
あなたのプログラムに入力されますD
(から始まる日番号がある1
)、およびN
に等しくmax(3, floor(num_live_players/4))
、その特定の日に死ぬことがあり、人々の最大数です。
各ターンの開始時に、START_TURN T
がプログラムに入力されます。ここT
で、ターン番号(から始まる1
)です。
プログラムはこれを受け取ると、使用人の動きのリストをコンマで区切って応答する必要があります。
有効な動きは次のとおりです。
R
:キャンプに戻りましょう。S
:宝物を探し続けてください。N
:使用人はすでに死んでいるか、キャンプにいます。
無効な動きを入力するとS
、ボットが生きていてキャンプにいないと解釈されN
ます。
各ターンの終わりに、文字列がプログラムに渡されます:
END_TURN [Turn #] [Bot 1 Moves] [Bot 2 Moves] ...
各ボットの使用人の動きはカンマで区切られています。
これらの動きは次のいずれかです。
R
:そのターンにキャンプに戻りました。r
:そのターンにキャンプに戻ることができませんでした。S
:まだ宝を探しています。D
:前のターンで死亡しました。N
:すでにキャンプに戻っています。
ボットとサーバントは、シミュレーション全体を通して同じ順序のままです。
例えば:
INDEX 2
....
END_TURN 8 N,N,N,N,N r,r,r,r,D D,D,D,N,R S,D,D,N,D
ここで、あなたは2番目のボット(r,r,r,r,r
)であり、まだ生きている(そして不運にも4つすべてで失敗した)4人の僕すべてを戻そうとしました。ボット1の使用人は全員キャンプに戻りました。ボット3には3人の死んだ使用人、もう1人はキャンプに戻り、5人目の使用人は無事に戻ってきました。ボット4には、1人のサーバントが残っており(これが1日の最後のターンであるため死にます)、1人のサーバントがキャンプにいて、3人の死んだサーバントがいます。
これらの各文字列の後、一日の終わりを知らせる文字列も出力されない限り(下記参照)、プログラムは使用人の次の動きをコンマで区切って出力します。すべての使用人は(N
すでにキャンプにいるD
場合、およびすでに死んでいる場合)を説明する必要があります。無効な移動はS
、使用人がまだキャンプ/死んでいないかのように扱われます。例:
N,N,S,S,R
つまり:
Servant # | Action
1 | Do nothing.
2 | Do nothing.
3 | Stay put (keep looking for treasure).
4 | Stay put (keep looking for treasure).
5 | Try to return to camp.
一日の終わりには、最後のターンのEND
文字列の後に次の文字列が渡され、誰が生きているかを全員に通知します。
END_DAY [Day #] [Bot 1 Status] [Bot 2 Status]
ここで、ステータスは、A
(alive)またはD
(dead)のコンマ区切りリストです。翌日はその直後に始まります。
ライブサーヴァントが6人未満になると、シミュレーションが終了します。プログラムは、シミュレーションの終了時に次の入力を受け取ります。
EXIT
ルール/詳細
- あなたの行動がある場所でのみ
S
宝物を見つけます。 - 実行されるシミュレーションの数:1000回
- プログラムは、移動を決定するのに1秒以上かかることはありません。
- あなたのプログラムは早く終了すべきではありません。一度だけ開始されます。
- 出力バッファ(該当する場合)が各出力後にフラッシュされることを確認します。
- ボットのフォルダー(
./players/BotName/
)にファイルが書き込まれる場合があります。ボットの名前は、ボットに付ける名前で、英数字以外の文字はすべて削除され、CamelCaseで記述されます。実行は順次実行されるため、エントリはコントローラの実行間でデータを保存する場合があります。 - プログラムはを受け取っ
EXIT
た後に終了する必要があります。 - コンパイルに失敗したり、エラーをスローしたり、無効なテキスト(カンマで区切られた5文字の形式ではない)を出力したりするプログラムは、競合から除外される場合があります。各出力の後に改行が必要です。
- コントローラーはGitHubにあります。
ボットをコンパイルして実行するためのボット名、言語+バージョン、コード、およびコマンド(該当する場合)を含めてください。
例
プログラムによって出力されるテキストの先頭には、>
。プログラムはこの文字を出力すべきではありません。
INDEX 2
START_DAY 1/3
START_TURN 1
>S,S,S,S,S
END_TURN 1 S,R,S,S,S S,S,S,S,S
START_TURN 2
>S,S,S,S,S
END_TURN 2 S,N,S,R,S S,S,S,S,S
START_TURN 3
>R,R,S,S,S
END_TURN 3 R,N,R,N,R R,R,S,S,S
START_TURN 4
>N,N,S,S,S
END_TURN 4 N,N,N,N,N N,N,S,S,S
START_TURN 5
>N,N,R,R,R
END_TURN 5 N,N,N,N,N N,N,r,r,R
END_DAY 1 A,A,A,A,A A,A,D,D,A
START_DAY 2/3
START_TURN 1
>S,S,N,S,N
END_TURN 1 R,R,R,R,R S,S,D,D,N
END_DAY 2 A,A,A,A,A D,D,D,D,D
EXIT
上記の例のスコアは次のとおりです。
Bot# Day 1 Day 2 Total
1 10 0 10
S1 1+2 0 3
S2 0 0 0
S3 1+2 0 3
S4 1 0 1
S5 1+2 0 3
2 20 0 20
S1 1+2 0 3
S2 1+2 0 3
S3 0 0 0
S4 0 0 0
S5 1+2+3+8 0 14
したがって、勝者はプレイヤー、ボット2です。勝者は絶対に生き残る必要がないことに注意してください。(プレイヤーがボットをもう1つ返送するまでキャンプは満杯にならないため、プレイヤーは1日目の30番まで残る可能性があることに注意してください)。
スコア
Bot Score
Bob 2939.422
Statisticians 2905.833
Morning Birds 1652.325
Evolved 1578.285
Slow Returners 1224.318
Wandering Fools 1065.908
Randomizers 735.313
Drunkards 0
Plague 0
ログはGitHubで入手できます。各Googleトライアルごとの結果は、このGoogleスプレッドシートで確認できます。