Liar's Dice adalah game dadu yang cukup sederhana. Saya telah melihat beberapa variasi peraturan yang berbeda, tetapi ini adalah versi yang paling saya kenal:
- Setiap pemain mulai dengan 5d6
- Kecuali ketika menghitung dadu pada akhir ronde, setiap pemain dapat melihat dadu mereka sendiri, tetapi tidak dari lawan mana pun
- Di awal setiap babak, semua pemain melempar dadu apa pun yang mereka miliki saat ini
- Kemudian, satu pemain (biasanya, ini adalah pemenang babak sebelumnya ATAU pemain di sebelah kiri pemain yang memulai terakhir kali; kami akan menggunakan yang pertama untuk KotH ini; dengan pemain acak memulai babak pertama) membuat perkiraan tentang berapa banyak nomor tertentu yang ada di atas meja (SATU-SATUNYA AKAN)
- Penawaran terus ke kanan, naik lebih tinggi setiap kali (misalnya; 3 balita, 3 enam dan 4 dua semuanya lebih tinggi dari 3 merangkak, tetapi 3 bertiga tidak; 4 yang juga lebih tinggi tetapi penawaran yang mungkin akan menempatkan Anda pada kerugian); sampai pemain mana pun memanggil pemain yang mendahului mereka pembohong
- Pada titik ini, semua pemain mengungkapkan dadu mereka dan menghitung jumlah tawaran nomor terakhir di atas meja sama sekali
- Jika total lebih rendah dari tawaran, pemain yang mengajukan penawaran harus memberikan dadu kepada pemain yang menyebut mereka pembohong, jika tidak, pemain yang menyebut penawar pembohong harus memberikan dadu kepada penawar (sehingga penawar menang jika jumlah mereka setidaknya sebanyak yang dia tawarkan, tidak harus ada angka pastinya)
- Saat Anda kehabisan dadu, Anda kalah
- Posisi pemain terakhir menang
Sebagai contoh:
Pemain satu memiliki 1,1,2,4,6 Pemain dua memiliki 1,2,2,3,5 Pemain tiga memiliki 1,3,3,4,6 Pemain satu: tiga enam. Pemain dua: empat berpasangan. Pemain tiga: empat bertiga. Pemain satu: lima berpasangan. Pemain dua: enam berpasangan. Pemain tiga: enam bertiga. Pemain satu: enam merangkak. Pemain dua: Pembohong! Mereka mengungkapkan dadu mereka dan menghitung yang (karena yang liar) dan merangkak. Ternyata ada, tepatnya, empat merangkak. Jadi pemain dua memberi pemain satu mati. Mereka memainkan kembali dan pemain satu memulai babak berikutnya.
Anda harus menulis bot untuk memainkan game ini. Itu harus mengimplementasikan kelas java abstrak berikut:
public abstract class Player {
public Player() {}
public String toString() {
return this.getClass().getSimpleName();
}
public abstract String bid(int yourId, int[] diceEachPlayerHas, int[] yourDice, String[] bids);
}
- Anda harus menerapkan metode penawaran
- Argumen pertama adalah posisi bot Anda saat ini dalam urutan belokan, yang kedua adalah array yang menunjukkan berapa banyak dadu yang dimiliki setiap pemain (termasuk diri Anda) saat ini, yang ketiga adalah array yang menunjukkan nilai yang saat ini ditampilkan pada dadu Anda sendiri, dan yang keempat adalah sebuah array dari semua penawaran yang dibuat sejak awal putaran saat ini - akan memiliki panjang 0 jika Anda mengajukan tawaran pertama dari putaran tersebut
- Outputnya harus berupa string dari bentuk "angka", atau string "Pembohong!" untuk menyebut penawar sebelumnya pembohong.
- Jika output Anda diformat secara ilegal, Anda akan dihilangkan.
- Anda dapat mengganti metode toString, tetapi tidak diharuskan untuk melakukannya. Namun, Anda tidak boleh mengeditnya dengan cara apa pun yang mengganggu keterbacaan output pengontrol.
- Anda diizinkan memanggil metode publik lain dari pengontrol, tetapi bukan metode utamanya.
- Anda dapat membaca dan mengedit hanya file di direktori yang sedang berjalan yang diawali dengan nama bot Anda sendiri
- Anda tidak diizinkan mengambil input dari sumber lain mana pun
- Variabel instan direset pada awal setiap game baru, tetapi variabel statis tidak.
Mencetak gol
- Satu set 1.000 permainan, dengan 3-5 pemain di masing-masing, akan disimulasikan setiap kali bot ditambahkan (segera setelah tiga bot atau lebih telah diajukan), diberi skor seperti yang ditunjukkan dalam sumber pengontrol (dalam permainan tertentu, Anda dapatkan 1 di awal setiap giliran Anda, 10 setiap kali Anda menangkap mati, dan 1.000 bonus jika Anda menang); menegakkan batas 5.000 TURNS (bukan putaran) setiap game.
- Bot Anda akan dinilai berdasarkan skornya dari set game terbaru; ditambah sepuluh kali skor suaranya, jika tidak negatif. (Yang terakhir tidak mungkin memiliki efek signifikan pada skor)
Sumber pengontrol dapat ditemukan di sini.
Skor per 2015-06-19:
Badnomial: 434,924 + 6x10 = 424,984
Nobody: 282,329 + 6x10 = 282,389
StraightShooter: 265,205 + 5x10 = 265,255
MostlyHonestAbe: 158,958 + 4x10 = 158,998
The Pirate: 157,005 + 1x10 = 157,015
Statistician: 144,012 + 2x10 = 144,032
Fidelio: 49,973 + 2x10 = 49,993
Absurd Bot: 6,831
DrHouse: 2,638 + 3x10 = 2,668
diceEachPlayerHas[yourId]
= jumlah dadu Anda, dan bids[yourId]
merupakan tawaran pertama Anda (atau nol jika giliran pertama Anda). Apakah itu benar?