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
popularity-contest
king-of-the-hill
java
SuperJedi224
sumber
sumber
diceEachPlayerHas[yourId]
= jumlah dadu Anda, danbids[yourId]
merupakan tawaran pertama Anda (atau nol jika giliran pertama Anda). Apakah itu benar?Jawaban:
Tak seorangpun
Mencoba menebak dadu dari pemain lain. Panggilan pembohong bot lain jika tidak tahu harus berbuat apa.
Sunting: Memperbaiki masalah di mana Tidak ada yang akan menawar selamanya, tidak pernah memanggil Liar.
sumber
Badnomial, bot yang membuat keputusan buruk berdasarkan distribusi binomial: Sunting: Memperbaiki kesalahan bodoh dalam perhitungan probabilitas, sekarang menyumbang pada Penawar berikutnya dan juga sebelumnya.
Ia mencoba untuk menentukan apakah ia harus menggertak atau memanggil Liar berdasarkan perkiraan distribusi binomial kumulatif untuk dirinya sendiri dan peluang bidder sebelumnya dan berikutnya untuk memiliki dadu yang mereka butuhkan.
Pada dasarnya, ini memanggil Liar jika Penawar sebelumnya sangat mungkin menjadi Pembohong atau jika merasa bahwa baik Penawar itu maupun Penawar berikutnya lebih cenderung berbohong daripada tidak.
sumber
Penembak lurus
Dia memainkannya lurus dan tidak menggertak. Dia juga cukup naif untuk berpikir bahwa orang lain juga begitu, jadi dia tidak pernah menyebut pembohong kecuali tawaran melampaui jumlah total dadu yang dimainkan (dikurangi dadu sendiri yang tidak cocok dengan tawaran).
Untuk menjadi sedikit lebih konservatif daripada jumlah yang diharapkan untuk setiap mati, ia tidak menghitung binatang buasnya sendiri, tetapi mengasumsikan orang lain memiliki distribusi yang seragam. Dengan empat pemain saat ini, dia atau MostlyHonestAbe tampil lebih dulu setiap kali, dengan skor yang cukup dekat.
Saya mengasumsikan tawaran minimum adalah
2 2
. Jika tawaran satu mati (atau penawaran) diizinkan, beri tahu saya agar saya dapat melakukan perubahan itu.sumber
MostlyHonestAbe
Abe membuat tebakan konservatif tentang sisa lawan yang mati, dan kemudian tetap jujur sampai dia tidak berpikir ada cukup dadu untuk mengalahkan tawaran saat ini. Pada titik ini dia menggertak sekali, lalu memanggil pembohong di waktu berikutnya.
sumber
Dr House
Semua orang berbohong!
sumber
Fidelio
Bot ini tahu bahwa hanya nilainya yang paling berulang yang akan membawanya ke kemenangan, jadi dia tetap menggunakannya. Dia menganggap ada sebagian dadu semua orang yang sama dengan miliknya, jika ada yang menawar lebih dari itu, dia menganggap dia pembohong.
Saya harap dia akan melakukan pekerjaan yang baik :).
sumber
Ahli statistik
Anda memiliki 1/3 peluang memiliki nomor selain ace. Seorang pria pernah mengatakan kepada saya bahwa tidak memeriksa dadu Anda dan hanya mengetahui kemungkinan dapat membuat Anda memenangkan permainan ini. EDIT: Itu penawaran terlalu tinggi. Tetapi itu tidak banyak meningkatkan skor.
sumber
Bot Absurd
Membuat klaim bahwa semua dadu adalah 6 kecuali jika tidak bisa. Jika bot tidak dapat melakukan itu, ini berarti bahwa ini adalah situasi yang tidak mungkin atau hampir tidak mungkin. Karena itu, ini disebut pembohong. Saya ingin tahu seberapa efektif bot ini nantinya.
sumber
Bajak laut
Saya membuat beberapa bot sederhana saat menguji controller, dan ini adalah satu-satunya yang benar-benar bagus.
Kemungkinan akan diperbaiki nanti.
sumber