Temmuz ayında Noel, bu yüzden kutlamak için sanal bir beyaz fil hediye değişiminden daha iyi bir yol var!
Bu King of the Hill mücadelesi için, bir Beyaz Fil değişim simülasyonunda oynayan ve mümkün olan en değerli hediyeyi almaya çalışan bir bot yaratmalısınız .
Oyun kuralları
- Oyun, her biri değişken sayıda dönüşten oluşan birçok turda oynanacaktır.
- Yuvarlak Kurulum : Oyunda, her biri [0 ... 1) aralığında rastgele olarak eşit olarak değer verilen oyuncular olduğu kadar çok hediye olacaktır ve bu değer, şimdiki değer açılana kadar bilinmemektedir. Oyuncular sıraya rastgele sıraya konacak. İlk oyuncu sıranın önünden fırlatılır.
- Bir oyuncunun sırası geldiğinde, ya bir hediye açabilir ya da başka bir oyuncunun hediyesini çalarak, hediyeleri çalınan oyuncuya geçer.
- Her bir hediye 3 defaya kadar çalınabilir.
- Sizden çalmış olan oyuncudan çalamazsınız.
- Her oyuncu aynı anda sadece bir tane hediye alabilir.
- Bir hediye açıldıktan sonra, oyun kuyruğun ön tarafından açılan bir sonraki oyuncuya ilerler. Bu, henüz bir dönüşü olmayan bir sonraki oyuncu olacak.
- Tur Sonu : Tüm hediyeler açıldığında, tur biter ve her oyuncu tarafından tutulan hediyenin değeri o oyuncunun skoruna eklenir. Yeni bir raunt başlar, her oyuncunun elinde hediye yoktur ve oyuncu sırası karıştırılır.
- Maç Sonu : En az bir oyuncu
100500 puan aldığında oyun sona erer ve toplamda en yüksek hediye değerine sahip oyuncuya zafer verilir.
Kodlama
Tüm başvurular Python 3.7 ile uyumlu olmalıdır. Doğrudan miras alan bir sınıf yazmalısınız WhiteElephantBot
. Örneğin:
class FooBot(WhiteElephantBot):
# Your implementation here
Bot sınıfınızda çağırmanız gereken bir __init__
yöntem (bir argüman alır) sağlayabilirsiniz . Sınıfınızda , bu sırada aşağıdaki bağımsız değişkenleri bekleyen bir yöntem bulunmalıdır :name
super().__init__(name)
take_turn
players
: Henüz hediyeleri olmayan tüm oyuncuların oyuncu isimlerinin listesi.presents
: Oyuncu adlarını, o oyuncunun sahip olduğu mevcut değeri ve mevcut kaç kez çalındığını içeren 2 tuple eşleyen sözlük. Bu sadece şu anda hediye sahibi olan diğer oyuncuları içerecektir.just_stole
: Eğer son alınan eylem çalmaksa, bu sadece çalmış olan oyuncunun adı olacaktır. Değilse, olacakNone
.
Her argüman değişmez ya da yeni bir nesne olacak, böylece bunların herhangi birisini mutasyona uğratmanın oyun üzerinde bir etkisi olmayacaktır. İsterseniz argümanlardan herhangi birinin bir kopyasını saklayabilirsiniz.
Örnek bir değer presents
:
{
'Alice': (0.35, 0),
'Bob': (0.81, 2),
'Charlie': (0.57, 1)
}
Kişisel take_turn
yöntem çalmaya veya istediğiniz oyuncunun adını dönmelidir None
hediye açın. Bir istisna oluşturursa, str
ya da dışında bir şey döndürür veya None
çalamayacağınız bir oyuncunun adı döndürürse , varsayılan olarak bir hediye açarsınız.
Her turun başlangıcında kurucunuz çağrılır, böylece durumu turdan turuna hatırlayamazsınız.
Buradan devralınarak , hediye diksiyonunu alacak ve çalabileceğiniz oyuncuların isimlerini içeren WhiteElephantBot
bir steal_targets
yönteme erişebileceksiniz just_stole
.
Komut dosyanızın ihtiyaç duyduğu tüm modüller girişinizin en üstüne aktarılmalıdır.
Test Sürücüsü
Test sürücüsü burada bulunabilir . from white_elephant import WhiteElephantBot
Gönderi cevabınızı eklemenize gerek yoktur , ancak yerel bir modülün bunu yapması gerekecektir.
Temel Rakipler
- Rastgele : Çalma hedefi rastgele seçilmiş olarak yeni bir hediye açmayı veya çalmayı rastgele seçer.
- Açgözlü : çalınabilecek en değerli hediyeyi çal. Hiçbir hediye çalınamazsa, bir hediye açın.
- Güzel : Her zaman yeni bir hediye açar. Asla çalmaz.
Ek Kurallar
- Tüm istisnaları yakalamak sizin sorumluluğunuzdadır. Sınıfınız bir istisna yakalayamazsa diskalifiye edilecektir. Ayrıca, lütfen KeyboardInterrupts'ı yakalamayın.
- Oyunlar arasında durumun kaydedilememesini atlamak için dosya veya başka yöntemler kullanmayın. Örneğin, sinir ağı durumunu çalışma ortasında bir dosyaya kaydedemezsiniz.
- Botunuz sınıf kodu ve ilgili sabitler içinde bağımsız olmalıdır.
- Yalnızca standart kitaplık içe aktarmalarını kullanabilirsiniz.
- Kesin bir performans gereksinimi yoktur. Makul ve ihtiyatlı olun. Performans bir sorun haline gelirse, zaman sınırları ekleme hakkımı saklı tutarım.
Kişi başına bir giriş.Birden fazla giriş gönderirseniz, botlarınız birlikte çalışmayabilir. Şimdilik kişi başına birden fazla girişe izin vereceğim, ancak bir sorun haline gelirse daha sonra reban edebilirim.- Bu kesin bir bitiş tarihi olmayan açık bir yarışmadır. Önemli değişiklikler olduğunda her zaman tekrar çalışacağım.
DÜZENLEME1: Kazanma puanı 100'den 500'e değiştirildi, böylece sıralama daha tutarlı. Test sürücüsünün yeni bir hatası var ve kazanma puanı değişikliklerini de yansıtıyor.
EDIT2: Gerekli ithalatlar hakkında açıklayıcı not.
Büyük Afiş (8 Ağu 2018 itibariyle)
- Örnek Bot (500.093)
- LastMinuteBot (486.163)
- RobinHood (463.160)
- OddTodd (448.825)
- Açgözlü Bot (438.520)
- SecondPlaceBot (430.598)
- Eşik Botu (390.480)
- Kumarbaz (313.362)
- NiceBot (275.536)
- RandomBot (256.172)
- GoodSamaritan (136.298)