Tepenin Kralı: Banka Soygunu


15

Örnek çalışma 4/11 eklendi

Kural Açıklama 4/8: Tüm başvurular, bilgisayarımın 48 saat içinde oynayabileceği kadar maçtan oluşan devasa bir herkese açık turnuvada yarışacak.

Twitch'teki akarsuları izlemek için her zaman harcayan herkes DeepBot'un yaygınlığının farkındadır ve belki de Banka Heist bahis oyununa bile aşinadır . Bu King of the Hill turnuvası doğrudan bu oyundan esinlenmiştir. Yine de endişelenme. Sanırım şeyleri ilginç tutmak için bu sürüme yeterince fazla bükülme yaptım.

Kısa bir örnek

#####GAME 13: 16 players######

Round 1:
gunHeCK bet 0.
PassivePanga bet 69.
SnitcherKing bet 1.
Lurker bet 0.
OC'sRandomTpyos bet 1.
MonisAddiction bet 69.
RaysFive01K bet 28.
LimeadeSneaktar bet 1.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
HeCKuSumer bet 185.

Round 2
HeCKuSumer decided to !guncheck.
LimeadeSneaktar decided to double cross.
MonisAddiction decided to all in.
OC'sRandomTpyos decided to acquire intel.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
PassivePanga decided to !guncheck.

Results
PassivePanga failed. :(
SnitcherKing failed. :(
OC'sRandomTpyos was successful, and may gain ¥0
MonisAddiction failed. :(
RaysFive01K was successful, and may gain ¥0
LimeadeSneaktar was successful, and may gain ¥1
HeCKuSumer failed. :(

Results:
0. KaylorrCriterion: 3600
1. Lurker: 3600
2. gunHeCK: 3600
3. SnitcherKing: 3586
4. PassivePanga: 2634
5. LimeadeSneaktar: 2496
6. HeCKuSumer: 1909
7. HardHatUmar: 490
8. RaysFive01K: 255
9. OC'sRandomTpyos: 170
10. MonisAddiction: 0

(In this round, 7 players joined the heist, but the dice only rolled right for 3 of them. Of those, only LimeadeSneaktar brought any home--having stolen it from OcsRandomTpyos. RaysFive01K won significantly more, but deposited it all at the bank before leaving. At this point, the players who did not heist are doing well, living off their day jobs.)

#####GAME 14: 231 players######

Round 1:
Lurker bet 0.
HeCKuSumer bet 190.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
MonisAddiction bet 0.
OC'sRandomTpyos bet 1.
gunHeCK bet 0.
LimeadeSneaktar bet 1.
RaysFive01K bet 25.
PassivePanga bet 69.
SnitcherKing bet 1.

Round 2
PassivePanga decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
HeCKuSumer decided to !guncheck.
SnitcherKing decided to finger.
RaysFive01K decided to deposit.
LimeadeSneaktar decided to double cross.

Results
HeCKuSumer failed. :(
OC'sRandomTpyos failed. :(
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
PassivePanga failed. :(
SnitcherKing failed. :(

Results:
0. KaylorrCriterion: 3840
1. Lurker: 3840
2. gunHeCK: 3840
3. SnitcherKing: 3825
4. PassivePanga: 2805
5. LimeadeSneaktar: 2495
6. HeCKuSumer: 1959
7. HardHatUmar: 490
8. MonisAddiction: 240
9. RaysFive01K: 229
10. OC'sRandomTpyos: 161

Six players heisted--but should have been paying more attention to the rabble and backed out, because the probabilities dropped too low to win, and all failed.


#####GAME 15: 300 players######

Round 1:
OC'sRandomTpyos bet 1.
Lurker bet 0.
SnitcherKing bet 1.
MonisAddiction bet 69.
LimeadeSneaktar bet 1.
gunHeCK bet 0.
HardHatUmar bet 0.
RaysFive01K bet 22.
KaylorrCriterion bet 0.
HeCKuSumer bet 195.
PassivePanga bet 69.

Round 2
HeCKuSumer decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
MonisAddiction decided to all in.
PassivePanga decided to !guncheck.
LimeadeSneaktar decided to double cross.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.

Results
OC'sRandomTpyos failed. :(
SnitcherKing failed. :(
MonisAddiction was successful, and may gain ¥0
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
HeCKuSumer failed. :(
PassivePanga failed. :(

And here, the probabilities dropped too low to win again--except for MonisAddiction, who went all in, and therefore avoided the probability modification incurred by the rabble backing out. No winnings are listed here, because a player who wins going all in immediately adds all winnings to its holdings without any possible modification by other players' actions.

Oyun kuralları

Turnuva / Oyun Yapısı

  • Turnuva, 1000 ila 1100 arasında rasgele ve eşit olarak seçilen bir dizi oyundan oluşacak ve her ciddi gönderi herkes için ücretsiz olarak aynı anda yarışacak.
  • Her oyuncu ilk oyuna 240 kredi ve sonraki her oyuna bir önceki oyunun sonunda sahip olduğu kredi sayısı ile başlar .
  • Her oyun 2 turda ilerler ve her turda oyuncular bir karar vermek için rasgele bir şekilde belirlenen bir sırayla çağrılır:
    • İlk turda bir oyuncu, bir banka soygununa katılımı paylaştırmak için 0 ile mevcut kredi varlıkları arasında herhangi bir tam sayı kredi ödeyebilir.
    • İkinci turda, soyguna en az bir kredi (bundan sonra "heisters" olarak anılacaktır) oynayarak katılmayı seçen her oyuncu, bahis turuna izin vermeye (ve bunu yaparken muhtemelen başka bir eylem gerçekleştirmeye) karar verebilir, soygundan vazgeç, ya da all-in. (Bu seçenekler aşağıda daha ayrıntılı olarak açıklanmaktadır.)
  • Soygunların sayısına ve ödedikleri toplam kredi sayısına bağlı olarak soygunun sahneleneceği beş bankadan biri seçilir. Bu seçim bireysel zafer olasılığını ve ödemenin belirlenme olasılığını etkiler. (Bankalar aşağıda açıklanmıştır.)
  • Devre dışı bırakmayan her heister, bankanın (değiştirilmiş) olasılığı ile, hissesini bankanın (değiştirilmiş) bahis oranlarıyla (yuvarlatılmış) çarparak kazanır ya da başka bir şekilde hissesini kaybeder. Her oyuncunun başarısının veya başarısızlığının ayrı ayrı belirlendiğine dikkat edin - bazıları başkalarının başarısız olduğu yerlerde başarılı olacaktır.
  • Katılmış olsun veya olmasın, tüm oyuncular başarılı olmuş veya başarısız olmuşsa, maaş çeki alırlar (aşağıda açıklanan istisnalar hariç).
  • Oyundan kalıcı olarak ayrılmanın imkansız olduğunu unutmayın. En kötüsü, bir oyuncunun bir sonraki maaş çekini almak için bir oyunu beklemesi gerekebilir.
  • 1000-1100 maçın hepsinden sonra, en fazla krediye sahip olan oyuncu o turnuvanın galibi ilan edilecektir.
  • Turnuva, belirtilmemiş sayıda (48 saat içinde hesaplanabilecek kadar çok sayıda) tekrarlanacak ve bu turnuvanın genel galibini belirlemek için tüm turnuvalarda oyuncu kazancı toplanacaktır.

İkinci Bahis Turu

  • İlk turda olumlu bir bahis oynayan herhangi bir oyuncu ikinci turda yer alabilir.
  • Bu turda bir oyuncu şunları yapabilir:
    • bahsini iptal etmek için "back out" dizesiyle yanıtlayın. Bu, mevcut soygun için bahisini sıfıra ayarlayacak ve soygunda kalan oyuncuların başarılı olma olasılığını biraz azaltacaktır. Bu seçeneği kullanarak, bir oyuncu soygunu takip eden 240 kredi maaş çekini, kalan hırsızları riske attığı için cezalandırır. (Geri kalan soyguncular, bankanın olasılık zamanına eşit olmayan bir olasılıkla başarılı olacaklardır.
    • bir soygun için en iyi dişli ve intel satın almak ve tek başına gitmek, silahlar yanan bir kimseye güvenmek. Böyle bir oyuncunun zafer olasılığı soygundan ayrılan diğer soygunculardan etkilenemez ve kazançları çift geçitler tarafından çalınamaz. Kazanan ödemeler, bahsi tüm kredi holdingleri artı 240 olarak değerlendirilirken, kayıp tutarları sıfıra ayarlanacaktır.
    • Önceki bahse bağlı kalmak ve soygunla normal şekilde geçmek için başka bir dize (boş dize dahil) ile cevaplayın. (Önerilen cevap: "! Guncheck"). Bazı yanıtların ek yan etkileri olacaktır:
      • "İş değiştir" cevabı, oynatıcının işini bırakmasına neden olur. Bu raunddan başlayarak, her raundun sonunda, oyuncu yeni bir pozisyonda işe alma şansı% 5 olacaktır. Bu başarılı olursa, oyuncu işe alınır ve derhal ilk maaş çekini alır. Her yeni işin, bir öncekinden tam olarak% 5 daha fazla ödeme yapması garanti edilir (aşağı yuvarlanır). Soygun başarılı olsun ya da olmasın bu eylem başarılı olacaktır.
      • Soygun başarılı olursa "intel kazanın" cevabı, oyuncunun tüm kazançlarını bu soygundan kredi başına fazladan 0.00001 almak için harcamasına neden olur ve böylece sadece o oyuncu için soyulmuş olan bankaların oranlarına harcanır . Bu oran değişikliği kalıcıdır. Örnek olarak, bir oyuncu banka 1'i ısrar ederken seçer ve soygunda 6969 kredi kazanırsa, banka 1'in bu oyuncuya yönelik oranları kalıcı olarak 0,06969 artar ve oyuncu bu soygundan hiçbir şey almaz.
      • "Satın alma koruması" cevabının verilmesi, oyuncunun soyulmakta olan bankadaki güvenlik görevlilerinden birini satın almasına neden olacaktır. Oyuncunun maaş çeki üzerinde 1 kredinin kalıcı olarak düşürülmesi karşılığında (bekçinin düzenli rüşvet), oyuncu o bankada "kalıcı" artan bir zafer olasılığı (bekçi nedeniyle oyuncuyu polislere "bahsetmeyi unutması" nedeniyle) diye sordu). Olasılık, oyuncunun o bankadaki mevcut zafer olasılığı arasındaki farkın% 1'i kadar artacak ve% 100 artacaktır. Soygun başarısız olsa bile bu eylem başarılı olacaktır. NOT: Herhangi bir zamanda, bir oyuncunun tüm koruma rüşvetlerini ödemek için yeterli kredisi yoksa, derhal ve "kalıcı olarak" ödenemeyen rüşvet sayısı kadar olasılık bonusu kaybeder,
      • Soygun başarılı olursa "depozito" cevabı, oyuncunun tüm kazançlarını söz konusu bankadaki bir hesapta bırakacaktır. Kredilere herhangi bir amaç için ulaşılamaz veya geri çekilinceye kadar oyuncunun skoruna dahil edilmez. Bu hesap oyun başına% 0,14 oranında faiz ödeyecektir.
      • Soygun başarılı olursa "geri çekilme" yanıtı, bir oyuncunun kazancına, hesaplanan bankadaki hesabının tüm içeriğini ekler. Sonuç olarak hesap sıfırlanır. Bu ek kazanç unutmayın edebilirsiniz çift geçenleri tarafından çalınmış.
      • "Çifte çapraz" cevabı iki şeyden birini yapar:
        • "Çifte çapraz" oynayan heister sayısı, soygunla geçmeye karar veren toplam çakılsız heister sayısının 1 / 10'u (yuvarlanmış) ise (veya bu tür 10'dan az oyuncu varsa tam olarak bir ), oyuncu, çift çaprazlama yapan tüm oyuncuların toplam kazancına eşit olan ek kazançlar alır (çift çaprazlama sayısına) (yuvarlanmış). Bu durumda çift çifte olmayanlar soygundan 0 kredi alır. Başka bir deyişle, çift geçenler diğer herkesin kredilerini çalar ve eşit olarak kendi aralarında bölerler.
        • "Çifte çapraz" oynayan heister sayısı eşiği aşarsa, oyuncu hiçbir kazanç kazanmaz (soygun başarılı olursa) maaş çekini yarıya indirir ve işinden kovulur. (Bkz. "İşleri değiştirme".) Bu durumda tüm çift geçişli olmayanlar (rabble dahil), tüm çift geçişlerin toplam kazançlarının, toplam çift geçişli olmayanların sayısına bölünmesiyle ikramiye ödemesi alacaktır. Başka bir deyişle, komplo bir sır tutamayacak kadar büyüdü, komplocular kök saldı ve soygundan dışlandı ve herkes ceza için paralarını ayırdı - ve kirli uğraş konusundaki şöhretleri de işlerini kaybetti.
      • "Parmak" cevabı ("çift geçişli bir alçak sıçan parmakla" ifadesinde olduğu gibi), soygun başarılı olursa, oyuncuya sekiz fırsat verir (rabble olmayan soyguncular setinin değiştirilmesi ile üniform çizim) crosser zaten tespit edilmemiştir .
        • Bu şekilde tanımlanan her bir çift çaprazlama, mevcut kredi varlıklarının% 25'ini (yuvarlatılmış) hemen vurulmak yerine ödeyecek, işini kaybedecek ve maaş çekini yarıya indirecektir (çünkü patron kötü davranışa tahammül etmeyecektir) ve soyulmakta olan bankadaki zafer olasılığının% 5'ini kaybeder (diğer heisterler gelecekte ekstra şüphelidir ve işler kıllı hale gelirse otobüsün altına atması muhtemeldir). Bu şekilde tanımlanan çift geçişler, çift geçişin diğer çift geçişler için başarılı olup olmadığını etkilemez, ancak çalınan kredilerin hiçbirini çift çaprazlamadan almazlar ve söz konusu çalınan krediler tekrar çapraz olmayanlara yeniden dağıtılır. çift ​​geçenleri.
        • Bu şekilde hiçbir çift çaprazlama tespit edilmezse, snitch herkesin zamanını boşa harcamak için dikiş alacak - ve aynı zamanda mevcut soygundan kazançlarının yarısını ödeyecek, maaş çekinde% 5'lik bir indirim yapacak (patron tattletale'nin saatlerini kesecek) ve kaybedecek Mevcut bankadaki bahis oranlarının% 5'i (diğer heisterlerin gelecekteki kazançları ile cömert / adil olma olasılığı daha düşüktür). Bu şekilde kaybedilen kazançlarının yarısı, çift çaprazlama başarılı olursa parmaksız çift çaprazlamalara veya çift çaprazlama başarısız olursa çift çaprazlama yapmayanlara (rabble dahil) dağıtılacaktır.

Bankalar

Banka, endeks kullanılarak seçilir numheisters + int(totalamountbet/100000), burada rakamlar 1. turda pozitif bir bahis oynayan oyuncu sayısıdır ve totalamountbet, bu oyuncuların bahislerinin toplamıdır. Başka bir deyişle, yüz bin kredi 1 ek heister kadar iyidir. Bu endekse göre, aşağıdaki bankalardan biri seçilecektir, endeksin karşıladığı veya aştığı en yüksek eşik değerine sahip banka:

Bank             Index Threshold   Victory Prob.  Bet Odds
----             ---------------   -------------  --------
0:Municipal                    0           0.540      0.80
1:City                        20           0.488      1.10
2:State                       40           0.425      1.30
3:National                    60           0.387      1.65
4:Federal Reserve             80           0.324      1.95

Bir turnuva devam ettikçe, her oyuncunun bahis eğilimi arttığı için en yüksek banka seviyesine ulaşma olasılığının artacağını unutmayın. Ayrıca, bunların herhangi bir "intel kazanın" veya "muhafız satın alın" eylemleri tarafından değiştirilmeden önce sadece başlangıçtaki ihtimaller ve olasılıklar olduğuna dikkat edin . Başlangıç ​​olasılıkları ve oranları ile sadece Şehir ve Ulusal bankalar beklenen zararları aşan kazançlar beklemiştir.

Rabble

  • Turnuva ayrıca soygunlara normal oyuncu olarak katılan ancak sonuçta atılmayan "rabble" adı verilen 500 oyuncu daha içeriyor. Bunlar, her oyunu farklı ve biraz daha az öngörülebilir kılar ve sadece birkaç "gerçek" oyuncu ile bile daha riskli / daha ödüllendirici bankalara ulaşmayı mümkün kılar.
  • Her oyun, tüm rabble alt kümelerinde rasgele olarak seçilen katılmak için bazı rabble alt kümesini içerecektir.
  • Tüm rabble aşağıdaki stratejiyi kullanır:
    • Rastgele , bu turda kararını vermiş olan oyuncuların kararlarına göre seçilecek olan bankada başarılı olma olasılığına eşit bir olasılıkla bahis yapmayı seçin .
    • Sıfır olmayan bir tutarda bahis oynuyorsanız, mevcut varlıklarını aşmayacak olan aşağıdaki tutarların en büyüğünü seçin: 69, 420, 6969, 80085.
    • İkinci turda, olasılığın% 5'e eşit olması ve daha önce geri çekilen bahisçilerin oranının% 50'sine eşit olması durumunda "geri çekil", aksi takdirde normal olarak soygundur. (Bunun, ikinci turdaki erken oyuncuların ayaklanmalar arasında büyük basamaklı etkileri olabileceği anlamına geldiğine dikkat edin - dikkat edin ve soygunun başlamadan önce çökmesine hazır olun.)

Girdiler ve çıktılar

Her iki turda da programlara komut satırı argümanları olarak tam olarak bu sırayla aşağıdaki bilgiler verilecektir . Aksi belirtilmedikçe, tüm değerler ondalık içermeyen tamsayılardır.

  1. Geçerli oyun numarası (sıfır dizinli)
  2. Mevcut oyunun yuvarlak sayısı (1 veya 2)
  3. Mevcut oyunda (rabble dahil) oyuncu sayısı.
  4. Bu turu daha önce sırası ile alan oyuncu sayısı.
  5. Şimdiye kadar pozitif bir bahis yapmış olan heister sayısı. (İkinci turda, bu aslında ilk turda satın alınan toplam heister sayısı olacaktır.)
  6. Şimdiye kadar yatırılan toplam kredi sayısı. (İkinci tur, bu aslında ilk turda yatırım toplam kredisi olacak - özellikle, etmez daha Heisters "tüm" ilk kazık daha içerir ve etmez "üzerinden geri" bir kazık içerir Heisters.)
  7. İkinci turda teyit edilen heister sayısı (yani "geri adım atmadı"). Bu ilk turda sıfır olacaktır.
  8. İzlenecek bankanın (sıfır endeksli) numarası (ilk turda, başka kimse bahse girmezse toplanacak olan banka)
  9. Şu anda oyuncu tarafından kullanılabilen kredi sayısı.
  10. Oyuncunun ilk turda oynadığı kredi sayısı. (Bu ilk turda her zaman sıfırdır.)
  11. Her oyunun sonunda oyuncunun maaş çekinde alacağı kredi sayısı.
  12. 1 oyuncu şu anda maaş çeki alıyorsa, 0 oyuncu işsizse
  13. Oyuncunun bir önceki oyunun sonu itibariyle skor tablosunda sıralaması (rabble dahil değil), 1 endeksli. (1 + olarak tanımlanmış, o sırada kesinlikle daha fazla kredisi olan oyuncu sayısıdır. Örneğin, ilk oyun sırasında tüm oyuncular 1. sıradadır.)
  14. Tüm oyuncular tarafından tutulan ortalama kredi sayısı (rabble dahil değil) (ondalık sayı olarak gösterilir)
  15. Tüm oyuncuların elinde tuttuğu kredi sayısında ortalama (mutlak sapma hariç) mutlak sapma (ondalık sayı olarak gösterilir)
  16. Herhangi bir oyuncu tarafından tutulan azami kredi sayısı (örn. 1. Sıradaki bir oyuncunun, hırsızlık hariç tuttuğu kredi sayısı)
  17. Oyuncunun banka 0 hesabında depoladığı kredi sayısı
  18. Banka 1 hesabı
  19. Banka 2 hesabı
  20. Banka 3 hesabı
  21. Banka 4 hesabı
  22. Oyuncunun 0 bankasında bireysel zafer olasılığı
  23. Sıra 1 olasılığı
  24. Sıra 2 olasılığı
  25. Sıra 3 olasılığı
  26. Sıra 4 olasılığı
  27. 0 bankasında başarılı bir soygun üzerine oyuncunun bireysel ödeme oranları
  28. Sıra 1 oranlar
  29. Sıra 2 oranlar
  30. Sıra 3 oranlar
  31. Sıra 4 oranlar

Bir oyunun ilk turunda, bir oyuncu programı 0 ile o oyuncunun hesabındaki toplam kredi sayısı arasında bir tamsayı oluşturmak için yazdırmalıdır. Kullanılabilir kredi bakiyesinden daha yüksek olan herhangi bir bahis tutarı maksimum bahis olarak alınır. Diğer tüm çıktılar (veya hata koşulları) sıfır bahis olarak yorumlanacaktır.

Bir oyunun ikinci turunda, bir oyuncu programının yukarıdaki "İkinci Bahis Turu" bölümünde açıklandığı gibi bir dizeyi basmak için basması gerekir. Buradaki bir hata koşulu varsayılan eylem olarak alınır: soygunla normal şekilde geçin.

kontrolör

Turnuva bu kontrolör kullanılarak yapılacaktır . Bot örnekleri de orada. Hala test ediliyor. Daha fazla kod gelecek. Hata düzeltmeleri göndermekten çekinmeyin (github'da). Herhangi bir kural da değişirse güncellenecektir.

Kendi makinenizde tek bir turnuva düzenlemek için, competitors.txt dosyasına bir satır ekleyin ve ardından şunu kullanın:

python bankheist.py 1000

Yarışma kuralları

  • Oyuncular, komut satırı argümanları alabilen, serbestçe mevcut olan herhangi bir dilde çok sayıda oyuncu programı gönderebilir.
  • Başvurular, programların derlenmesi ve bilgisayarımda çalıştırılması için gereken araçların isimleri ve düzenlenecek kesin komutlar dahil olmak üzere oldukça açık talimatlar içermelidir. Gönderme, programı çalıştıran ve doğrudan kendisine eklenmiş komut satırı bağımsız değişkenlerine sahip olabilecek en az bir komut içermelidir.
  • Gönderilerin, onları tanımlamak için benzersiz bir ada sahip olmaları gerekir (boşluk içermez).
  • Programlar oldukça kısa sürede çalıştırılmalıdır. (Makul olan şeyle ilgili bir üst sınır koymuyorum. Aksine, içerik oluşturucuyu hızlandırmak için büyük boyutta bir yürütme süresine sahip gibi görünen herhangi bir girişi tavsiye edeceğim.)
  • Programlar olabilir değil okumak veya dosyalara yazmak. Ayrıca, çalışmalar arasında bilgi depolamak için başka bir yöntem de kullanamazlar. Bu zorluğun amacı sınırlı / özetlenmiş bilgilere dayanarak karmaşık kararlar vermektir.
  • Bu kuralların herhangi biri ve tümü gerektiğinde değiştirilebilir. Bu yazının üstüne bu tür değişiklikleri gösteren bir mesaj eklenecektir .
  • Bu yarışma biter en erken geçen bir hafta sonra kullanıcı gönderdiğinde mesajların onun ya da onu ilk teslim . Yarışma sona erene kadar mevcut gönderilerin değişikliklerine her zaman izin verilir. Bu yazının en üstündeki bir mesajda son teslim tarihini güncel tutmak için elimden geleni yapacağım .
  • Bu yarışma, eğer varsa, kuralların en son değiştirilmesinden bir hafta sonra sona erecektir. Herhangi bir kural değişikliğinden etkilenen kullanıcılar için yorum bırakmak için elimden geleni yapacağım.
  • Bahse girsen iyi olur ben de bu yarışmaya kendim katılacağım. ;)

Yorumlar uzun tartışmalar için değildir; bu görüşme sohbete taşındı .
Dennis

Belki de seğirme veya soygun oyununa aşina olmadığımdan, ancak en iyi şekilde çalışılmış küçük bir örnekle gösterilebilecek birçok kural var. Şu anda çok yaklaşılmaz gibi görünüyor.
Moogie

Tepenin Kralı? Yıllardır bu ismi duymadım.
Beta Çürümesi

Yanıtlar:


6

Bazı "kötü" program örnekleri.

Bunlar denetleyiciyi test etmek için yazdığım bazı botlar. Çoğunlukla, belirli bir eylem türünü test etmek için gereken minimum şeyi yaparlar. Bu KotH'a katılım seviyesine bağlı olarak, birkaçından hepsine kadar her yerde final turnuvasına dahil edilecektir, çünkü oyundaki stratejinin birçoğu birçok farklı botun davranışlarıyla uğraşmaktan gelecektir.

Hepsini buraya "kullanım" örnekleri olarak ekliyorum.

Lurker

Asla bahis oynamayın. Bunu yenmiyorsanız, stratejinizi yeniden düşünün.

print 0

PassivePanga

Her zaman 69 bahis.

import sys


round = int(sys.argv[2])
myyattas = int(sys.argv[9])
if round == 1:
    if myyattas > 69:
        print "69"
    else:
        print "0"
else:
    print "!guncheck"

KaylorrCriterion

Kelly bahsi sadece ve ancak Kelly Ölçütü karşılanırsa yap. Bu nadiren önce bazı "intel kazanın" ve "satın alma koruması" yapmakla olur, bu genellikle Lurker ile aynı sonucu alır.

import sys
import ast
game,round,numplayers,alreadyplayed,numbet,yattasbet,numready,bankid,myyattas,mybet,mypayment,hired,myrank,mu_yattas,sigma_yattas,max_yattas = map(ast.literal_eval,sys.argv[1:17])
bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

def get_bank(bettors,credits):
    selector = min(4,int(bettors+int(credits/100000.)/20))
    return bankprobs[selector],bankodds[selector]



if round == 1:
    if alreadyplayed < 0.37*numplayers or numbet==0:
        print 0
        #sys.stderr.write("1: %d,%d\n"%(alreadyplayed,numbet))
    else:
        ratiosofar = numbet/float(alreadyplayed)
        bettors = ratiosofar * numplayers
        ratesofar = yattasbet/float(numbet)
        credits = bettors*ratesofar
        p,b = get_bank(bettors,credits)
        f = (p*(b+1)-1)/b
        print max(int(f*myyattas),0)
        #sys.stderr.write("2: %d,%d\n"%(p,b))
else:
    if alreadyplayed < 0.37*numbet or numbet==0:
        print "!guncheck"
    else:
        p,b = get_bank(numbet,yattasbet)
        realp = p*numready/float(alreadyplayed)
        f = (realp*(b+1)-(1-240./(myyattas+240.)))/b
        print "!guncheck" if f>0 else "back out"

gunHeCK

Bir Kelly bahsi yaparsanız ve bugüne kadar görülen Heisters sayısının bahis belirtmek durumunda olacaktır Kelly kriterini karşılayan (ama yanlış varsa vazgeçme yoktur). Tipik olarak Lurker'dan daha kötü

import sys
import ast
game,round,numplayers,alreadyplayed,numbet,yattasbet,numready,bankid,myyattas,mybet,mypayment,hired,myrank,mu_yattas,sigma_yattas,max_yattas = map(ast.literal_eval,sys.argv[1:17])
bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

def get_bank(bettors,credits):
    selector = min(4,int(bettors+int(credits/100000.)/20))
    return bankprobs[selector],bankodds[selector]

if round == 1:
    if alreadyplayed < 0.37*numplayers or numbet==0:
        print 0
        #sys.stderr.write("1: %d,%d\n"%(alreadyplayed,numbet))
    else:
        ratiosofar = numbet/float(alreadyplayed)
        bettors = ratiosofar * numplayers
        ratesofar = yattasbet/float(numbet)
        credits = bettors*ratesofar
        p,b = get_bank(bettors,credits)
        f = (p*(b+1)-1)/b
        print max(int(f*myyattas),0)
        #sys.stderr.write("2: %d,%d\n"%(p,b))
else:
    print "!gunHeCK"

Moni'sAddiction

Zaten kazanmadığınız sürece "hepsi içeri" gidin.

import sys
import random


round = int(sys.argv[2])
myrank = int(sys.argv[13])
mybet = int(sys.argv[10])

if round == 1:
    if random.random()<0.1:
        print 1
    else:
        print 69
else:
    if myrank>1:
        print "all in"
    else:
        if mybet==1:
            print "back out"
        else:
            print "!guncheck"

HeCKuSumer

Daima varlıkların sabit bir kısmını sabitleyin.

import sys

round = int(sys.argv[2])
myyattas = int(sys.argv[9])

if round==1:
    print int(0.1*myyattas)
else:
    print "!guncheck"

OC'sRandomTpyos

Erken turnuvada işleri çok değiştirin. O parayı olasılıkları ve oranları iyileştirmek için harcayın. Sonra, son birkaç oyunun hepsini içeri girerek geçirin.

import sys
import ast
import random

game,round,numplayers,alreadyplayed,numbet,yattasbet,numready,bankid,myyattas,mybet,mypayment,hired,myrank,mu_yattas,sigma_yattas,max_yattas = map(ast.literal_eval,sys.argv[1:17])
bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

if round == 1:
    if game<800 or myrank>3:
        print 1
    else:
        print myyattas/4
else:
    if game<800:
        if hired:
            print "change jobs"
        else:
            print random.choice(["acquire intel","buy guard"])
    else:
        if myrank>3:
            print "all in"
        else:
            print "!guncheck"

HardHatUmar

Turnuvanın çoğu için işleri mümkün olduğunca değiştirir. Gerekli minimumdan daha fazla bahis yapmaktan kaçınır. Terbiyeli iyi, ama büyük değil.

import sys

game = int(sys.argv[1])
round = int(sys.argv[2])
hired = int(sys.argv[12])

if round==1:
    if game < 900 and hired:
        print 1
    else:
        print 0
else:
    print "change jobs"

LimeadeSneaktar

Turnuvanın ilk bölümünde işleri mümkün olduğunca değiştirin. Diğer her oyunu çift geçişle geçirin. SnitcherKing'e karşı bile iyi bir performans sergiliyor. Diğer birçok bot çift geçiş ve parmak olduktan sonra muhtemelen daha kötü ücret olacak. Değilse - kuralların değiştirilmesi gerekebilir.

import sys
import ast

game,round,numplayers,alreadyplayed,numbet,yattasbet,numready,bankid,myyattas,mybet,mypayment,hired,myrank,mu_yattas,sigma_yattas,max_yattas = map(ast.literal_eval,sys.argv[1:17])
bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

if round==1:
    print 1
else:
    if hired and game<900:
        print "change jobs"
    else:
        print "double cross"

SnitcherKing

Her zaman minimum ve her zaman parmağınızla bahis yapın. LimeadeSneaktar içeren küçük turnuvalarda oldukça başarılı.

import sys

round = int(sys.argv[2])

if round == 1:
    print 1
else:
    print "finger"

RaysFive01K

Biraz daha karmaşık ve bu nedenle oldukça iyi. Avantajının çoğu, kazanma olasılıklarını arttırırken (ve tüm bu gardiyanlar ve soygunlar için ödeme yapacak işleri değiştirerek) tüm turnuvaları erken turnuvaya yatırmak (onları çift geçitlerden korumak) ve oyunun sonunda hepsini geri çekmektir ( ciddi ilgi gördüklerinde ve çekilememe olasılığı yeterince düşük olsa da - burada çift geçicilere verilen kayıplar ciddi bir risktir). Bu kesinlikle turnuvada olacak ve ciddi bir rakip olabilir veya olmayabilir.

import sys
import ast
import random
game,round,numplayers,alreadyplayed,numbet,yattasbet,numready,bankid,myyattas,mybet,mypayment,hired,myrank,mu_yattas,sigma_yattas,max_yattas = map(ast.literal_eval,sys.argv[1:17])

bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

if round ==1:
    if game < 900:
        print myyattas/10
    else:
        print 1
else:
    if game < 500 and hired:
        print random.choice(["change jobs","finger","buy guard"])
    elif game < 900:
        print "deposit"
    elif bankholdings[bankid]>0:
        print "withdraw"
    else:
        if alreadyplayed/float(numplayers)<0.5:
            print "finger"
        else:
            print "back out"

Ben <Twitch & Panga mem insert> bu nameings tasvip
CAD97

2

Yalnız John

import sys
import ast

game,round,numplayers,alreadyplayed,numbet,creditsbet,numready,bankid,mycredits,mybet,mypayment,hired,myrank,mu_credits,sigma_credits,max_credits = map(ast.literal_eval,sys.argv[1:17])

bankholdings = map(int,sys.argv[17:22])
bankprobs = map(float,sys.argv[22:27])
bankodds = map(float,sys.argv[27:32])

if round == 1:
    if mycredits > 100 or hired:
        print(int(mycredits)/2)
    else:
        print(0)
else:
    if bankprobs[int(bankid)] > 0.6:
        print("all in")
    elif int(mypayment) > 50 :
        print("buy guard")
    elif int(mycredits) > 200 and int(game) < 900 and hired == "1":
        print("change jobs")
    elif bankprobs[int(bankid)] * (float(numready)+1)/(float(alreadyplayed)+1) < 0.30:
        print "withdraw"
    else:
        print "!guncheck"

Rüşvet verir, kazanma olasılığı olana kadar gardiyanlar, sonra içeri girer. Yalnız.

Gardiyanlara rüşvet vermek için daha fazla paraya ihtiyacı olduğunda işleri değiştirir.


bu oyuncuya ne denir?
quintopia

@quintopia ops! Göndermenin tüm yolunu unuttum! İsim ve açıklama eklendi.
MegaTom

Güzel. Tıpkı bir ipucu olarak, tüm bu dakikayı yapmanız gerekmez. Her şey yarasadan değerlendirilmenin doğru tipi. Bu, koşulun hired == "1"her zaman yanlış olacağı ve asla işleri değiştirmeyeceği anlamına gelir .
quintopia

Yaptığım diğerlerine karşı tek bir turda koştum. Son sıraya geldi. Kötü şans :(
quintopia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.