Nihai sonuçlar mevcut
Giriş
Önceki KOTH’dan sonra ağır temalar ( fantezi savaşı , dünya çapında pandemik …) sonrasında, yeni bir ışıksız oyuna geri döndüm. Bu kez, bir "tahta oyunu benzeri" durumda karşı karşıya. Gerçekten büyük bir masanın ortasına bir baş aşağı bozuk para yığını yerleştirilir ve yağma payınızı almaya kararlısınız!
Sözlük
Madeni Paralar : Döndürülebilen veya açılabilen jetonlar.
Açılmamış : Masanın üzerine yerleştirilen ve değerleri aşağıya bakacak şekilde paralar. Bu jetonların varsayılan halidir.
Döndürülmüş : Masanın üzerine yerleştirilen ve maddi değerleri yukarı bakacak şekilde.
Yerel : Sikke yığını anlamına gelir.
Global : Merkezdeki bozuk para yığınını ifade eder.
Prensip
Oyunun başında , her oyuncu 0 puan ve 0 jetonla başlar (çevrilmiş veya çevrilmemiş). Oyun sıra tabanlı. Sıra sırasında oyuncular, masanın ortasındaki para destesi, kendi madeni para destesi veya diğer oyuncularla etkileşime giren 3 adede kadar harekete geçebilirler.
Oyun sırası oyunun başında rastgele tanımlanır. Argüman listesindeki oyuncuların sırası dönüş sırasını temsil eder ve o listede soldan sağa doğru gider. "Sonraki" ve "Önceki", her iki tarafın da sonuncusuysanız, sırasıyla "o listedeki sağdaki" ve "o listedeki soldaki" ifadesini gösterir.
Oyun, 50 tur boyunca devam eder veya bir oyuncu dönüşünün sonunda merkezde 0 jeton olana kadar devam eder (bu, ilk işlemden sonra kazık boş olsa bile, 3 işleminizi tamamlayacağınız anlamına gelir; oyun devam ediyor). Küresel sikkelerin başlangıç sayısı bu formülle rastgele tanımlanır:
(2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))`
Her hareket size puan kazandırır (veya bazılarını kaybetmenize neden olur) ve oyunun sonunda , kazandığınız her jeton puanlarınıza eklenir ( çevirilmemiş için -1, çevrilmiş için +2 ). En yüksek puana sahip oyuncu kazanır.
Denetleyici size komut argümanları üzerinden giriş sağlar ve programınızın stdout üzerinden çıkması gerekir.
Sözdizimi
Giriş
Programınız her çağrıldığında, bu biçimde argümanlar alacak:
Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;...
Yuvarlar 1 indekslidir.
Örnek giriş
6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0
Burada 6. tur olduğunu ve 2. oyuncu olduğunu görüyorsunuz. Merkez kazıkta 52 jeton var. 12 puan, 1 döndürülmüş jeton ve 0 döndürülmemiş jetonunuz var. Puan olumsuz olabilir.
Çıktı
Her biri bu dönüşü gerçekleştireceğiniz bir eyleme karşılık gelen üç karakter (boşluksuz, ayırıcı yok) çıkarmanız gerekir. Karakterlerin sırası eylemlerin sırasını belirler. Aynı işlemleri birden çok kez çıkarabilirsiniz. İşleminizi tamamlamak için yeterli jeton yoksa, yalnızca mevcut jetonlar için maksimum jeton ve sayma puanı kullanır.
N
: Hiçbir Şey Yapmayın
1
: Merkez kazıktan 1 jeton alın [Efektler: +1 lokal unflipped / -1 point / -1 global unflipped]
2
: Merkez kazıktan 2 jetonu atlayın. genel ters çevrilmemiş]
3
: merkezi sütun 3 para al [Etkileri: +3 lokal ters çevrilmemiş / -3 puan / -3 küresel ters çevrilmemiş]
A
: kazık geri 1 para koyun [Etkileri: -1 lokal ters çevrilmemiş / + 1 nokta / + 1 ] küresel ters çevrilmemiş
B
: 2 paralar kazık geri koyun [Etkileri: -2 lokal ters çevrilmemiş / + 2 puan / + 2 küresel ters çevrilmemiş]
C
: 3 paralar kazık geri koyun [Etkileri: -3 lokal ters çevrilmemiş / +3 puan / +3 global unflipped]
X
: Yığınızdan 1 jeton çıkarın[Etkileri: -1 lokal ters çevrilmemiş / 0 puan]
Y
: kazık 2 jetonlarınızı [Etkileri: -2 lokal ters çevrilmemiş / 0 puan]
Z
: kazık 3 jetonlarınızı [: -3 lokal ters çevrilmemiş / 0 puan Etkileri]
R
Döndürme paralar: önceki oyuncuya [Efektler: alınmamış başına -1 puan, toplanan başına +2 puan aldı / tüm oyunculara uygulayın]
T
: Bozuk paraları bir sonraki oyuncuya çevirin [Efektler: alınmamış başına -1 puan, toplanan +2 puan aldı / attı bütün oyuncular]
F
: Kağıt 1 jeton [Etkileri: -1 lokal ters çevrilmemiş / + 1 yerel Döndürülmüş / + 2 noktası]
U
: Unflip 1 jeton [Etkileri: + 1 lokal ters çevrilmemiş / -1 yerel Döndürülmüş / -2 noktası]
Örnek çıktı
2FF
: İki jeton alır ve iki jeton çevirir -2 + 2 + 2 = 2 points
Çıktınız yanlışsa denetleyici varsayılacaktır NNN
.
kontrolör
Kontrol cihazını GitHub'da bulabilirsiniz . Ayrıca, Java ile yazılmış iki örnekleme çubuğu içerir. Çalışmasını sağlamak için projeyi inceleyin ve Java IDE'nizde açın. main
Sınıf yöntemindeki giriş noktası Game
. Java 8 gerekli.
Bot eklemek için önce ya Java (.class dosyaları) için derlenmiş versiyona ya da yorumlanmış dillerin kaynaklarına ihtiyacınız var. Bunları projenin kök klasörüne yerleştirin. Ardından, players
pakette yeni bir Java sınıfı oluşturun (zaten var olan botlardan örnek alabilirsiniz). Bu sınıf Player
, yöntemi geçersiz kılmak için uygulamalıdır String getCmd()
. Dönen String, botlarınızı çalıştırmak için shell komutudur. Örneğin bu komutla Ruby bot iş yapabilirsiniz: return "C:\Ruby\bin\ruby.exe MyBot.rb";
. Son olarak, botu Game
sınıfın en üstündeki players dizisine ekleyin .
kurallar
- Botlar, belirli diğer botları yenmek veya desteklemek için yazılmamalıdır.
- Dosyalara yazma izin verilir. Lütfen "yoursubmissionname.txt" yazınız, oyun başlamadan önce klasör boşaltılacaktır. Diğer dış kaynaklara izin verilmez.
- Gönderinizin yanıtlaması için 1 saniye kaldı.
- Gönderilerinizi derlemek ve çalıştırmak için komutlar verin.
Desteklenen diller
Her dili deneyip destekleyeceğim, ancak çevrimiçi olarak ücretsiz olması gerekiyor. Bir "ana dil" kullanmıyorsanız, lütfen kurulum talimatlarını verin.
Şu an itibariyle, çalıştırabilirim: Java 6-7-8, PHP, Ruby, Perl, Python 2-3, Lua, R, node.js, Haskell, Kotlin, C ++ 11.
Nihai sonuçlar
Bunlar 100 oyunun sonuçlarıdır (puan eklenir):
1. BirdInTheHand: 1017790
2. Balance: 851428
3. SecondBest: 802316
4. Crook: 739080
5. Jim: 723440
6. Flipper: 613290
7. Wheeler: 585516
8. Oracle: 574916
9. SimpleBot: 543665
10. TraderBot: 538160
11. EgoisticalBot: 529567
12. RememberMe: 497513
13. PassiveBot: 494441
14. TheJanitor: 474069
15. GreedyRotation: 447057
16. Devil: 79212
17. Saboteur: 62240
Oyunların bireysel sonuçları burada bulunur: http://pasted.co/63f1e924 (oyun paraları ve oyun başına tur sayısı ile).
50 itibarına Bir ödül kazanan verilir: Kuş In The Hand tarafından Martin Büttner .
Katılımınız için hepinize teşekkür ederim, bir sonraki KOTH görüşmek üzere ~