pengantar
Dalam game ini, pemain menggunakan pasukan mereka untuk melawan tentara pemain lain, merebut wilayah, dan menjadi orang terakhir yang bertahan. Setiap belokan, pemain menerima jumlah pasukan dasar untuk digunakan sesuai keinginan mereka. Namun, dengan merebut wilayah di wilayah tertentu, pemain dapat meningkatkan jumlah ini untuk memberi mereka potensi keuntungan di kemudian hari dalam permainan. (Ini pada dasarnya sama dengan Warlight ).
Semua bot harus ditulis dalam Java, C, atau C ++ (saya akan menyertakan bahasa lain tetapi tidak memiliki perangkat lunak atau pengalaman untuk mereka). Pengajuan Anda tidak perlu untuk memperluas kelas, dan Anda dapat membuat fungsi, kelas, antarmuka, atau apa pun yang diperlukan, dan menggunakan paket atau kelas apa pun di API standar . Jika Anda berencana membuat kelas atau antarmuka, harap pertimbangkan untuk menggunakan kelas dalam atau antarmuka bagian dalam.
Tolong jangan mencoba untuk secara terprogram mengubah controller atau kiriman lainnya dalam kompetisi ini.
Gameplay
Gambaran
Array dua dimensi 10x10 akan mensimulasikan papan, setiap elemen / sel mewakili "wilayah". Akan ada 20 putaran dan hingga 1000 putaran per putaran. Setiap belokan, pemain pertama-tama akan mengerahkan pasukan yang mereka miliki ke salah satu wilayah yang mereka miliki, dan kemudian diberi kesempatan untuk mengangkut tentara mereka ke wilayah terdekat dalam upaya untuk menangkap wilayah lawan mereka dengan menyerang pasukan di dalamnya. Pemain harus mengerahkan semua pasukan mereka, tetapi mereka tidak harus memindahkannya jika diinginkan.
Serang / Pindahkan pasukan
Jika pemain menginginkan, ia dapat mengirim pasukan dari satu wilayah ke salah satu dari delapan wilayah yang berdekatan. Papan "membungkus", yaitu jika wilayah pemain di satu sisi, pasukan dari sana dapat ditransfer ke wilayah yang berdekatan di sisi lain. Ketika memindahkan pasukan dari suatu wilayah, seharusnya masih ada setidaknya satu pasukan tersisa di wilayah itu. Misalnya, jika suatu wilayah mengandung lima pasukan, tidak lebih dari empat pasukan dapat dipindahkan ke wilayah yang berbeda; jika suatu wilayah berisi satu, pasukan itu tidak bisa bergerak.
Jika seorang pemain mengirimkan n
pasukan dari satu wilayah ke wilayah yang mereka miliki, wilayah itu akan menerima n
pasukan.
Katakanlah seorang pemain mengirimkan n
pasukan dari wilayahnya ke wilayah lawan dengan o
pasukan di dalamnya. o
akan berkurang secara n * .6
bulat ke bilangan bulat terdekat; Namun, pada saat yang sama, n
akan menurun secara o * .7
bulat ke bilangan bulat terdekat. Aturan berikut yang berhubungan dengan apakah atau tidak wilayah yang ditawan telah ditangkap akan berlaku:
- Jika
o
mencapai nol DANn
lebih besar dari 0, pemain akan mengambil alih wilayah, yang akan memilikin
pasukan di dalamnya. - Jika keduanya
n
dano
menjadi nol,o
secara otomatis akan diatur ke 1 dan wilayah tidak akan ditangkap. - Jika
o
tetap lebih besar dari 0, jumlah pasukan di wilayah pemain akan meningkat sebanyakn
dan wilayah lawan tidak akan ditangkap.
Bonus
Sekelompok wilayah akan dipilih untuk mewakili bonus; jika satu pemain memiliki semua wilayah yang merupakan bagian dari grup, pemain itu akan menerima jumlah pasukan tambahan per giliran.
Bonus memiliki nomor id untuk menunjukkan nilai dan nilai yang berbeda yang mewakili jumlah pasukan tambahan yang dapat diterima pemain. Setiap putaran, nilai bonus akan menjadi angka acak antara 5 dan 10, inklusif, dan sepuluh bonus akan tersedia di lapangan, masing-masing dengan sepuluh wilayah termasuk dalam bonus.
Misalnya, jika pemain yang menerima 5 pasukan per giliran memiliki semua wilayah yang menghasilkan bonus dengan nilai 8, pemain akan menerima 13 pasukan pada giliran berikutnya dan putaran berikutnya. Namun, jika pemain kehilangan satu atau lebih wilayah yang membentuk bonus, ia akan menerima hanya 5 pasukan per giliran.
Input output
Program Anda harus mengambil input melalui argumen baris perintah, yang akan memiliki format berikut:
[id] [armies] [territories (yours and all adjacent ones)] [bonuses] ["X" (if first turn)]
id
danarmies
keduanya bilangan bulat.id
adalah id Anda, danarmies
merupakan jumlah pasukan yang Anda perlu gunakan untuk wilayah Anda. Anda harus mengerahkan semua pasukan yang diberikan kepada Anda - tidak lebih dan tidak kurang.territories
adalah serangkaian string yang mewakili wilayah yang Anda miliki dan wilayah yang tidak Anda miliki yang berdekatan dengan wilayah Anda. String dalam format ini:[row],[col],[bonus id],[player id],[armies]
row
dancol
menunjukkan baris dan kolom papan di mana wilayah itu,bonus id
adalah id dari bonus bahwa wilayah ini adalah bagian dari,player id
adalah id dari pemain yang memiliki wilayah itu, danarmies
adalah jumlah tentara yang terkandung di wilayah itu. Ini semua angka.bonuses
adalah serangkaian string yang mewakili bonus di papan yang dapat Anda manfaatkan. String dalam format ini:[id],[armies],[territories left]
id
adalah id dari bonus,armies
adalah jumlah pasukan tambahan yang dapat Anda terima dengan memiliki semua wilayah dalam bonus ini, danterritories left
jumlah wilayah dalam bonus yang perlu Anda tangkap untuk menerima pasukan tambahan.
Harap perhatikan bahwa argumen kelima, "X", akan muncul jika ini adalah putaran pertama putaran dan dapat digunakan untuk alasan kenyamanan.
Contoh input pada belokan pertama:
0 5 "7,6,7,-1,2 8,7,7,-1,2 7,7,7,0,5 6,6,7,-1,2 8,8,9,-1,2 6,7,7,-1,2 7,8,9,-1,2 6,8,9,-1,2 8,6,7,-1,2" "0,5,10 1,5,10 2,9,10 3,9,10 4,9,10 5,5,10 6,5,10 7,6,9 8,7,10 9,7,10" X
Program Anda harus menampilkan dua string yang dipisahkan oleh baris baru, yang pertama berisi daftar baris dan kolom wilayah yang ingin Anda tambahkan pasukannya dan jumlah pasukan yang ingin Anda tambahkan ke dalamnya, dan yang kedua mencantumkan baris dan kolom wilayah yang ingin Anda kirimi pasukan dan jumlah pasukan yang ingin Anda kirim. Output mungkin berisi spasi tambahan.
Untuk menentukan wilayah yang ingin Anda tambahkan pasukan, output Anda harus mengikuti format ini:
[row],[col],[armies]
row
dan col
adalah baris dan kolom papan di mana wilayah yang ingin Anda tambahkan pasukan, dan armies
jumlah pasukan yang ingin Anda tambahkan ke wilayah tersebut.
Untuk menentukan wilayah yang ingin Anda kirimi pasukan, output Anda harus mengikuti format ini:
[srow],[scol],[drow],[dcol],[armies]
srow
dan scol
adalah baris dan kolom papan di mana wilayah tujuan pengiriman pasukan, drow
dan dcol
baris dan kolom papan tempat tujuan pengiriman pasukan, dan armies
jumlah pasukan yang ingin Anda kirimi . Perhatikan bahwa jika Anda tidak ingin memindahkan pasukan apa pun, program Anda harus mencetak spasi.
Output sampel mungkin ini:
0,0,5
0,0,0,1,3 0,0,1,0,3 0,0,1,1,3
Dalam hal ini, pemain menyebarkan lima pasukan ke wilayah dengan 0,0 dan memindahkan tiga pasukan dari 0,0 ke 0,1; tiga dari 0,0 menjadi 1,0; dan tiga dari 0,01 ke 1,1.
Putaran dan Putaran
Pada awal setiap putaran, semua pemain akan diberikan satu wilayah yang terletak di tempat acak di papan (dimungkinkan bagi dua atau lebih pemain untuk mulai bersebelahan). Wilayah yang membentuk bonus juga dapat berubah.
Pada belokan pertama, setiap pemain akan memiliki satu wilayah yang berisi lima pasukan, dan mereka akan menerima lima pasukan yang dapat mereka gunakan (ini adalah minimum yang dapat mereka terima). Semua wilayah lain akan dimiliki oleh NPC yang tidak menyerang; masing-masing berisi dua pasukan dan memiliki id -1
.
Setiap belokan program Anda akan dijalankan, dan kedua bagian output akan dikumpulkan. Pengontrol akan menerapkan bagian pertama dari output, segera menambahkan pasukan ke wilayah; namun, controller akan menunggu sampai semua pemain memberikan output kedua, perintah serangan / transfer mereka. Setelah ini selesai, perintah akan dikocok secara acak dan kemudian dieksekusi. Program Anda harus memberikan hasil dan berhenti dalam satu detik atau kurang untuk berpartisipasi dalam belokan.
Mencetak dan Menang
Untuk setiap putaran tertentu, jika satu pemain tetap, pemain itu akan mendapatkan 100 poin. Jika tidak, jika 1000 putaran berlalu dan masih ada beberapa pemain, 100 poin akan dibagi secara merata antara pemain yang tersisa (yaitu 3 pemain yang tersisa menghasilkan 33 poin masing-masing). Pemain mana pun yang memiliki poin terbanyak di akhir 20 putaran akan menang.
Pengajuan
Posting Anda harus menyertakan nama bot, bahasa tempat penulisan, deskripsi singkatnya, dan kode yang digunakan untuk menjalankannya. Contoh bot akan diposting di sini sebagai contoh dan akan digunakan dalam kontes. Anda dapat mengirimkan sebanyak yang Anda inginkan.
Lain
Program Anda dapat membuat, menulis, dan membaca dari suatu file selama nama file itu sama dengan nama yang Anda gunakan untuk pengiriman Anda. File-file ini akan dihapus sebelum awal turnamen tetapi tidak di antara putaran.
Giliran Anda akan dilewati jika:
- Anda dihilangkan (tidak memiliki wilayah);
- program Anda tidak mencetak apa pun;
- program Anda tidak berakhir dalam satu detik;
- Anda mengerahkan terlalu sedikit pasukan ke wilayah Anda (mengerahkan pasukan ke wilayah yang tidak Anda miliki akan diperhitungkan dalam hal ini) atau terlalu banyak pasukan; atau
- output Anda menyebabkan controller melempar pengecualian.
Perintah serangan / transfer Anda tidak akan dieksekusi jika:
- program Anda tidak memberikan hasil yang benar;
- Anda memilih wilayah untuk memindahkan tentara dari yang bukan milik Anda;
- Anda bergerak nol atau jumlah pasukan yang negatif dari wilayah Anda;
- Anda memindahkan terlalu banyak pasukan dari wilayah Anda; atau
- Anda memilih wilayah untuk mengirim pasukan yang tidak berdekatan dengan wilayah yang Anda pilih untuk memindahkan pasukan.
Anda dapat menemukan pengontrol dan bot sampel di sini . Bot akan berpartisipasi dalam permainan, tetapi mungkin tidak akan memenangkan putaran apa pun (kecuali jika benar - benar beruntung).
Hasil
Menjalankan pengontrol setelah mendorong perbaikan bug ke sana, WeSwarm terus menjadi kekuatan yang harus diperhitungkan. Dibutuhkan bot dengan strategi hebat untuk memiliki peluang melawannya.
As of 25-08-15, 04:40 UTC
1: WeSwarm 1420
2: java Player 120
java LandGrab 120
java Hermit 120
java Castler 120
6: java RandomHalver 80
Memperhatikan!
Bug yang ditemukan oleh Zsw menyebabkan wilayah yang mengerahkan pasukannya setelah orang lain memiliki potensi keuntungan dalam permainan telah diperbaiki. Hasil edit didorong ke controller, jadi silakan gunakan versi yang ada yang ditemukan menggunakan tautan di atas.
sumber
Jawaban:
Castler - Java 8
Dia hanya ingin membuat kastil persegi ... dan jika dibiarkan sendiri akan melakukan hal itu. Meskipun dia bosan dengan kastil kecil sehingga membuatnya semakin besar. Ini pasti akan berarti konflik dengan pemain lain dan pertempuran pun terjadi. Namun dia tidak pernah melupakan bentuknya yang paling diinginkan ... kotak.
Klik gambar untuk gif animasi (15 mcg) dari simulasi 20x 1000 putaran penuh. Castler mencetak 1.700 dan para pemain lainnya masing-masing mencetak 100.
sumber
Hermit - Jawa
Terus tambahkan pasukannya ke kota yang sama. Saya tidak berpikir itu bisa diturunkan tanpa mendapat bonus tentara.
sumber
WeSwarm - C ++ 11 [v2.2]
Diperbarui ke v2.2 pada 25 Agustus 2015.
v2.2 - disesuaikan karena perubahan cara controller melaporkan pasukan.
v2.1 - TNT kesulitan menyusun kode saya, jadi saya berhenti menggunakan
stoi
.v2.0 - refactor kode bersama dengan beberapa perbaikan bug.
Selamat datang di kawanan. Kekuatan kami dalam jumlah. Keinginan abadi kami adalah mengumpulkan semua bonus Anda untuk memaksimalkan hasil kami. Jangan menghalangi jalan kami, jangan sampai Anda ingin kewalahan. Jangan mencoba mengalahkan kami, karena setiap orang yang Anda bunuh, tiga lagi akan terjadi. Anda mungkin memaksa kami untuk berkorban, tetapi Anda tidak akan pernah memaksa kami untuk menyerah!
GIF animasi
Diarsipkan:
v2.1: https://drive.google.com/uc?export=download&id=0B-BtKdd4FDDEU3lkNzVoTUpRTG8
v1.0: https://drive.google.com/uc?export=download&id=0B-BtKdd4FDDEVzZUUlFydXo2T00
sumber
stoi
tidak terselesaikan meskipun memiliki C ++ 11. Ada konsisten masalah dengan menyelesaikan itu yang saya belum mengetahui bagaimana melakukannya, jadi bisa Anda memberikan solusi alternatif yang tidak menggunakanstoi
?LandGrab - Jawa
Semakin banyak lahan semakin baik. Menargetkan secara eksklusif wilayah bebas jika ada, kemudian dengan pasukan sisa mulai membangun dan mengeluarkan musuh satu per satu.
sumber
Random Halver - Java 8
Bot yang sangat sederhana yang hanya memindahkan setengah pasukannya di setiap wilayah ke wilayah tetangga yang acak. Tidak masalah jika tetangga itu teman atau musuh ...
Meskipun tidak dapat bersaing dengan Castler, itu mengejutkan baik terhadap Player dan bot lainnya.
sumber