Giriş
Bazı hizmetçilerle birlikte ıssız bir adada mahsur kaldınız ve hazine için avlanıyorsunuz. Ne kadar uzun arama yaparsa, o kadar çok hazine bulur. Ne kadar az kişi ararsa, o kadar çok kişi bulur.
Sınırlı tedarik nedeniyle, lider grubun dörtte birine kadar birkaç kişinin her gece ölüme terk edilmesine karar verdi. Kimseye önceden belli bir günde kaç kişinin öleceğini tam olarak söylememeye karar verdi.
Sizin için hazine bulmak için kamptan dışarı çıkacak 5 kişilik küçük bir grubun kontrolündesiniz.
Amaç
Bu yarışmanın amacı mümkün olduğunca çok hazineyi toplamaktır. Hizmetçilerin kampa dönmeye çalışmadığı her dönüşte belirli sayıda hazine bulacaklar. Hizmetçileriniz farklı zamanlarda kampa dönebilirler.
Bir işçinin hazine aramak için dışarıda kaldığı her dönüşte, işçi zaten kampta bulunan işçi sayısının (tüm botlardan) 1+R
bulunduğu hazinenin parçalarını bulur R
. Ölü botlar bu hesaplamayı hesaba katmaz.
Her günün başlangıcında, bir rasgele sayı ( n
dan) 2
için max(3, floor(num_live_players/4))
seçilecektir. (1. gün 10 oyuncular için bu 2
kadar max(3,50/4)=12
günde 1 20 oynatıcılarda, bu olurdu. 2
İçin max(3,100/4)=25
bu sayı o gün için ölüme terk edilecek oyuncu sayısını gösterir.), Ve programa verilmeyecek .
Eğer bir hizmetçi n
geri dönen son kişilerden biriyse, ölecek ve bulduğu hazineyi elinize devredemeyecektir. Ayrıca, hizmetçi maceranın geri kalanı için hazine avına katılamaz.
Nihai skorunuz, macera başına elde ettiğiniz ortalama hazine miktarıdır (kontrolörün çalışması).
Açık slotlardan daha fazla kişi aynı dönüşte kampa dönmeye çalışırsa, rasgele sayılar kimin girip kimin öldüğünü belirler.
Bu adada gün doğumundan gün batımına kadar bir gün 30 tur sürer. Geceleri çok sayıda tehlikeli hayvan olduğu için gün batımına dönmemek kampa girmenize izin verilmeyeceği anlamına gelir.
Giriş çıkış
Programınız simülasyonun tamamı için çalışmalıdır.
Simülasyonun başlangıcında, botunuzun dizini INDEX I
nerede I
girilir (bu dizin 1'den sayılır).
Her günün başlangıcında , gün sayısına (başlangıçtan itibaren ) ve eşit olan START_DAY D/N
programınıza girilir; bu D
, o gün ölen maksimum kişi sayısıdır.1
N
max(3, floor(num_live_players/4))
Her START_TURN T
turun başlangıcında, programınıza girilir, burada T
tur numarası (başlangıçtan itibaren 1
).
Programınız bunu aldıktan sonra, hizmetçilerinizin her birinin virgülle ayrılmış hareketlerinin bir listesiyle yanıt vermesi gerekir.
Geçerli hamleler:
R
: Kampa dönmeye çalışın.S
: Hazine aramaya devam et.N
: Hizmetçi zaten öldü ya da kampta.
Geçersiz bir hamle girmek S
bot kampta değil, kampta değil gibi yorumlanacaktır N
.
Her turun sonunda, programınıza bir dize geçirilir:
END_TURN [Turn #] [Bot 1 Moves] [Bot 2 Moves] ...
burada her botun hizmetkarlarının hareketleri virgülle ayrılır.
Bu hamleler aşağıdakilerden biri olacaktır:
R
: Başarıyla bu dönüş kampına döndü.r
: Bu dönüş kampına geri dönemedi.S
: Hala hazine arýyor.D
: Daha erken dönerek öldü.N
: Zaten kampa geri döndüm.
Botlar ve hizmetçiler tüm simülasyon boyunca aynı sırada kalır.
Örneğin:
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
Burada, r,r,r,r,r
hala hayatta olan (ve şanssız bir şekilde dördünde de başarısız olan) dört hizmetçiyi geri vermeye çalışan ikinci bot ( ) sensin . Bot 1'in hizmetçileri kampa geri döndüler. Bot 3, biri kampta olmak üzere üç ölü hizmetçiye ve başarılı bir şekilde geri dönen beşinci hizmetçiye sahiptir. Bot 4'te kalan bir hizmetçi vardır (ve bu günün son dönüşü olarak ölecektir), kampta bir hizmetçi ve üç ölü hizmetçi vardır.
Bu dizelerden her birinin ardından, günün sonunu belirten bir dize de çıkmadıysa (aşağıya bakın), programınız hizmetçilerinizin virgülle ayırarak sonraki hareketlerini çıkarmasıdır. Tüm hizmetliler hesaplanmalıdır ( N
zaten kamptaysa ve D
zaten ölmüşse). Geçersiz hamleler S
, hizmetçi zaten kampta / ölüde değilmiş gibi ele alınacaktır . Misal:
N,N,S,S,R
bunun anlamı:
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.
Bir günün sonunda END
, kimin hayatta olduğunu bildiren son sıradaki ipin ardından aşağıdaki ip geçilir :
END_DAY [Day #] [Bot 1 Status] [Bot 2 Status]
burada durum virgülle ayrılmış A
(canlı) veya D
(ölü) bir listedir . Ertesi gün hemen sonra başlar.
Simülasyon, 6'dan az canlı hizmetli olduğunda sona erer. Programınız simülasyonun sonunda aşağıdaki girdiyi alacaktır:
EXIT
Kurallar / Detaylar
- Sadece eyleminizin olduğu
S
sıralarda hazine bulacaksınız. - Gerçekleştirilen simülasyon sayısı: 1000 kez
- Hareketlerinizi belirlemek için programınızın 1 saniyeden fazla sürmemesi gerekir.
- Programınız erken çıkmamalıdır; tam olarak bir kez başlatılacak.
- Her çıkışın ardından çıktı arabelleğinin (varsa) temizlendiğinden emin olun.
- Dosyalar bot klasörünüze (
./players/BotName/
) yazılabilir . Bot adınız, botunuza adınız ne olursa olsun, tüm alfasayısal olmayan karakterler kaldırıldı ve CamelCase'de yazıldı. Girişler, sıralı olarak yapıldığından denetleyicinin çalışması arasında veri kaydedebilir. - Programınız alındıktan sonra çıkmalıdır
EXIT
. - Hata derleyemeyen veya atmayan veya geçersiz metin (virgülle ayrılmış 5 karakter biçiminde olmayan) çıkaran programlar yarışmanın dışında bırakılabilir. Her çıkışı yeni satır takip etmelidir.
- Denetleyici GitHub'da bulunabilir .
Lütfen bot adını, dil + sürümünü, kodu ve botunuzu derlemek (varsa) ve çalıştırmak için komut ekleyin.
Misal
Program tarafından çıkarılan metnin önüne a ile gelir >
. Programınız bu karakteri çıktılamamalıdır.
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
Yukarıdaki örneğin puanları:
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
Bu yüzden kazanan oyuncu, bot 2'dir. Kazananın mutlak sona kadar hayatta kalması gerekmediğini unutmayın. (Ayrıca, oyuncu bir gün daha geri gönderene kadar kampın dolu olmayacağından, 1. günde 30'a kadar oyuncu kalabilirdi).
Skorlar
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
Günlükler GitHub'da bulunur . Her deneme başına sonuçlar bu Google e-tablosunda mevcuttur .