Latar Belakang
Game Morra adalah game sederhana. Dalam versi "asli", beberapa pemain secara bersamaan membuang angka 0-5 dengan tangan mereka sambil menebak jumlah total tangan semua orang. Versi yang akan saya gunakan di sini telah dimodifikasi untuk meningkatkan potensi strategi non-sepele, dan dijelaskan di bawah ini:
- Ada dua pemain.
- Seperti di gunting batu-kertas, para pemain bergerak secara bersamaan.
- Setiap belokan, setiap pemain memilih angka 0-5 dan juga menebak pilihan lawan mereka 0-5. Ini berarti bahwa dua angka adalah output setiap belokan. Untuk memperjelas, kedua angka keluaran harus dalam kisaran 0-5, inklusif.
- Jika Anda menebak pilihan lawan dengan benar tetapi lawan Anda tidak menebak dengan benar, Anda memenangkan sejumlah poin yang sama dengan jumlah dari dua angka yang dimainkan. Misalnya, jika angka yang dimainkan adalah 3 dan 5, tebakan yang benar akan bernilai 8 poin.
- Jika kedua atau kedua pemain menebak dengan benar, tidak ada poin yang diberikan.
- Orang dengan poin terbanyak setelah 1000 putaran memenangkan permainan itu.
Turnamen
Turnamen akan dilakukan dengan gaya round-robin dan akan dijalankan dengan menciptakan setiap pasangan yang memungkinkan dari kontestan. Untuk setiap kemenangan, kontestan memperoleh 2 poin kemenangan. Setiap pertandingan menghasilkan 1 poin kemenangan. Tidak ada poin kemenangan yang diperoleh karena kekalahan.
Secara intuitif, pemenang turnamen adalah kontestan dengan poin kemenangan terbanyak melawan yang lain.
Cara Masuk
Akan ada dua metode pengiriman bot untuk bersaing. Metode pertama, dan banyak disukai, adalah untuk mengimplementasikan antarmuka Java yang disediakan oleh pengontrol. Metode kedua adalah menulis program independen.
Mari kita bahas metode Java terlebih dahulu. Antarmuka Anda akan perlu untuk mengimplementasikan adalah Player
dan mendefinisikan dua metode: public String getName()
mengidentifikasi bot Anda, dan public int[] getMove(String[] args)
mengambil args
sebagai array dari enam senar, mychoices myguesses myscore opponentchoices opponentguesses opponentscore
. Contohnya adalah sebagai berikut:
042 045 0 324 432 6
Ini berarti bahwa saya memilih 0 pada ronde pertama dan menebak bahwa lawan saya akan melempar 0. Lawan saya melempar 3 dan menebak saya akan melempar 4. Pada ronde ketiga, lawan saya membuat tebakan yang benar bahwa saya akan melempar a 2, artinya dia mendapatkan 2 + 4 = 6 poin.
Metode Anda akan mengembalikan array dua bilangan bulat, yang merupakan pilihan dan tebakan Anda masing-masing. Contohnya adalah {4,2}
untuk pilihan 4 dan menebak 2.
Berikut adalah contoh bot Java lengkap yang ditulis sebagai metode. Jika Anda mau, kiriman Anda hanya perlu memasukkan apa yang ada di dalam getMove
metode.
import java.util.Random;
/**
* A simple example Morra bot to get you started.
*/
public class ExampleBot implements Player
{
public String getName()
{
return "ExampleBot";
}
public int[] getMove(String [] args)
{
//easiest way I know to break down to create a move history
//(just contains their throw history)
char[] theirThrowsC = args[3].toCharArray();
int[] theirThrows = new int[theirThrowsC.length];
for(int i = 0; i < theirThrowsC.length; i++)
{
theirThrows[i] = Integer.parseInt(Character.toString(theirThrowsC[i]));
}
//get my score
int myScore = Integer.parseInt(args[2]);
Random r = new Random();
int guess = r.nextInt(6);
if(theirThrows.length > 0)
{
guess = theirThrows[theirThrows.length-1];
}
//throws a random number, guesses what they threw last
return new int[] {r.nextInt(6),guess};
}
public static int otherMethod(int example) //you can write additional static methods
{
return 0;
}
}
Sebagai Program Independen
Saat ini saya terbatas dalam mendukung bahasa tambahan. Selain Java, saya dapat menerima program yang ditulis dalam Python 3.4, Perl 5, atau Ruby 2.1.5. Jika ada bahasa yang tampaknya diinginkan beberapa orang, saya akan berusaha sebaik mungkin untuk menambahkannya.
Input ke program Anda akan menjadi argumen di baris perintah. Itu bisa terlihat seperti ini:
perl awesomebot.plx 042 045 0 324 432 6
Output dari program Anda harus menjadi pilihan Anda diikuti oleh tebakan Anda, masing-masing diikuti oleh spasi.
Harap sertakan dalam jawaban Anda perintah tepat yang diperlukan untuk menjalankannya. Ingatlah bahwa saya menjalankan Windows 8.1.
Aturan Ekstra
Menyimpan Status dan Timeout
Program Anda akan diizinkan untuk membuat satu file teks di direktori lokal, tempat Anda dapat menyimpan informasi. Informasi ini akan disimpan sepanjang turnamen tetapi dihapus setelahnya. Beri nama file yang bisa saya identifikasi.
Ada batas waktu 500 milidetik untuk kode Anda merespons. Kegagalan untuk merespons dalam batas waktu (atau memberikan langkah yang tidak valid) akan mengakibatkan kehilangan pertandingan tersebut. Pengiriman Java saat ini memiliki batas waktu pasif (yang saya dapat tingkatkan ke aktif), sedangkan pengiriman non-Jawa memiliki batas waktu aktif di mana proses mereka dihentikan setelah 500 milidetik.
Lebih banyak aturan pengiriman
- Anda diizinkan beberapa kali kiriman, asalkan mematuhi aturan dan tidak memberi tag tim.
- Setiap entri harus unik. Anda tidak dapat membuat salinan persis dari logika bot lain dalam bahasa yang berbeda.
- Bot tidak dapat berinteraksi satu sama lain (untuk membentuk tim apa pun).
- Anda tidak dapat menggunakan logika bot lain di dalam bot Anda untuk, katakanlah, mengidentifikasi pesaing Anda dan memprediksi tindakannya. Anda bisa, tentu saja, mencoba menentukan strategi lawan Anda.
- Jangan berusaha mengacaukan controller, kontestan lain, atau komputer saya. Jangan terhubung ke sumber informasi eksternal.
Pengendali
Versi pengontrol saat ini ditemukan di sini . Ini ditulis dalam Java 8. File "Tournament" adalah pengontrol utama, yang juga berisi daftar pesaing (jika Anda ingin meng-host kompetisi Anda sendiri).
Papan peringkat
Saya belum benar-benar dapat memperbarui papan peringkat sangat sering. Saya agak sibuk akhir pekan ini. Dengan "agak sibuk" Maksudku tidak ada akses ke komputer dari 6:30 pagi hingga 9:30 malam. Berikut adalah skor setelah 5 kali berjalan. Bot "Echo" terus hangus karena suatu alasan (mungkin salah saya, saya belum menyelidiki).
170 - Quinn and Valor
158 - Historian
142 - DeltaMax
140 - MorraCowbell
132 - Extrapolator
115 - Rainbolt
102 - Popularity
100 - Interpolator
83 - CounterBot
80 - Basilisk
76 - Erratica
65 - Trendy
63 - Scholar
62 - RandomGuesser
60 - KingFisher
59 - NullifierBot
55 - EvolvedBot
48 - Confused
Kredit
Banyak terima kasih kepada Rainbolt dan Peter Taylor untuk bantuan mereka dengan controller.