pengantar
Permainan berlangsung di dunia kecil dengan berbagai kota. Para penguasa kota saling membenci dan ingin menguasai dunia. Orang-orang dibagi menjadi dua kelompok, pejuang dan keturunan rendah. Namun, orang rendahan dapat meningkatkan menjadi prajurit. Anda adalah penguasa tiga kota ini.
Gameplay
Ketika permainan dimulai, Anda menguasai tiga kota. Di setiap kota, ada 100 orang. Anda harus membaginya menjadi ksatria dan rendahan.
Kemudian permainan yang sebenarnya dimulai, yang berbasis giliran. Giliran terlihat seperti ini: "Produce" knights
=> execute command of first town
=> execute command of next town
(ulangi untuk semua kota) => try a rebellion
.
- Setiap belokan, program Anda akan dipanggil untuk setiap kota milik Anda . Anda dapat menyerang kota , mendukung kota atau hanya menunggu . Tindakan ini akan dieksekusi secara berurutan, tidak secara bersamaan.
- Setiap belokan ketiga, Anda mendapatkan satu ksatria per 2 bayi rendah (23 lowborns => 11 ksatria) Jumlah bayi yang dilahirkan tetap sama.
- Ksatria di dalam kota memiliki bonus pertahanan 1,2. Jika Anda diserang, ksatria Anda akan dikalikan dengan nomor ini (mis. Anda miliki
78 knights
, Anda akan memiliki93 knights
selama serangan). Setelah serangan, para ksatria tambahan akan dihilangkan (jika82 knights
selamat, Anda masih akan memiliki78 knights
). - Dalam serangan, setiap ksatria membunuh musuh sebelum dia mati. Misalnya:
30 knights
serangan100 knights
(tanpa bonus pertahanan) => 70 ksatria selamat. - Anda dapat merebut kota dengan membunuh semua ksatria di dalamnya . Semua orang rendahan menjadi milik Anda sekarang dan ksatria Anda yang masih hidup ditempatkan di kota. Di babak selanjutnya, Anda dapat memerintah kota ini selain semua kota lainnya .
- Setelah kota ditangkap, ia tidak akan memiliki bonus pertahanan selama 2 putaran penuh (karena gerbang rusak). Pada belokan ketiga, gerbang akan diperbaiki.
- Untuk mencegah kaum rendahan dari pemberontakan, Anda membutuhkan sedikitnya setengah ksatria sebanyak yang ada di kaum rendahan (23 bangsawan di kota membutuhkan sedikitnya 12 ksatria di kota yang sama). Kalau tidak, orang rendahan akan membunuh semua ksatria dan kota menjadi "netral" (tanpa pemimpin, ditunjukkan oleh PlayerId
-1
). - Kota-kota netral akan "menghasilkan" ksatria, tetapi tidak akan menyerang atau mendukung kota lain.
Sintaksis
Kontroler memberi Anda input melalui argumen perintah, program Anda harus output melalui stdout.
Keluaran (persiapan)
Sebelum permainan dimulai, pengontrol akan meminta Anda mengirim tanpa argumen. Ini berarti Anda harus mendistribusikan 100 orang Anda (untuk setiap kota) menjadi ksatria dan orang-orang rendahan. Anda perlu menampilkan KnightCount KnightCount KnightCount
, misalnya 95 80 95
.
Input
Round;YourPlayerId;YourTownId;PlayerId_TownId_knights_lowborns;PlayerId_TownId_knights_lowborns;...
Pada babak pertama, ini akan menjadi sesuatu seperti
1;2;2;0_0_100_0;1_1_50_50;2_2_80_20
. Di sini, Anda melihat itu adalah babak pertama, Anda adalah pemain 2 di kota 2. Anda memiliki 80 ksatria dan 20 pemain rendahan.
Nanti dalam permainan, bisa jadi sesuatu seperti 20;2;1;0_0_100_0;2_1_30_50;2_2_40_20
. Anda masih pemain 2 (ini tidak pernah berubah), tetapi Anda merebut kota 1 (yang Anda kendalikan saat ini).
Output
A TownId NumberOfKnights
atau S TownId NumberOfKnights
atau W
(untuk menunggu).
Contoh: A 2 100
(serang kota 2 dengan 100 ksatria) atau S 3 2
(dukung kota 3 dengan 2 ksatria).
Aturan
- Bot tidak boleh ditulis untuk mengalahkan atau mendukung bot lain yang spesifik.
- Menulis ke file diperbolehkan. Silakan tulis ke " namamu. Pengiriman ", folder tersebut akan dikosongkan sebelum permainan dimulai. Sumber daya eksternal lainnya tidak diizinkan.
- Kiriman Anda memiliki 1 detik untuk merespons (per kota).
- Berikan perintah untuk mengkompilasi dan menjalankan kiriman Anda.
Kemenangan
Pemenang adalah yang memiliki kota terbanyak setelah 100 putaran. Jika seorang pemain menangkap semua kota, permainan berhenti dan dia menang. Jika beberapa pemain memiliki jumlah kota yang sama, jumlah ksatria akan dihitung, maka jumlah pemain rendahan.
Pengendali
Anda dapat menemukan pengontrol di github. Ini juga mengandung 2 samplebot, ditulis dalam Java. Buka di Eclipse, tempatkan bot yang dikompilasi di folder root dan tambahkan kelas ke program kontrol (sama seperti samplebots).
Hasil
Untuk hasil akhir, saya menjalankan 10 pertandingan. Ini rata-rata:
Kota Pemain 1. Liberator 37.5 2. Sehtimianer 8.2 3. SuperProducer 5.4 4. Tidur 1.4 5. Frankenstein 1.2 6. Mentega 0.8 (lebih banyak ksatria) 7. TheKing 0.8 (less knight) 8. Keluaran 0.6 9. Turtle 0.5 (lebih banyak ksatria) 10. AttackOn3 0.5 (less knight) 11. Demokrasi 0.3 12. CalculatedFail 0.2 13. Revolusionis 0.1
Anda dapat membaca contoh permainan di sini: contoh permainan di github
sumber
A
mendukung kota lainB
, jumlah ksatria yang diberikan hanya dipindahkan dariA
keB
, setelah itu mereka dikontrol oleh pemiliknyaB
, benar?Jawaban:
Python3, Liberator
Satu-satunya tujuan bot ini adalah untuk membebaskan orang-orang paling umum dari kuk tirani yang menindas.
sumber
Python 2, Sang Raja
Raja memerintah kota dengan jumlah tertinggi di kerajaannya, dan menuntut semua ksatria berlebih untuk dikirim kepadanya dari kota-kota lain di bawah kendalinya. Ketika dia memiliki cukup ksatria, dia akan menyerang kota musuh. Dia bukan Raja yang sangat pintar, jadi belum mempelajari sejarah atau memahami konsekuensi dari tindakannya.
Ini belum diuji dengan controller atau bot lainnya.
sumber
He is not a very smart King, so has not studied history or understands the consequences of his actions.
Javascript (Node), Empire
Mulai dari yang kuat untuk menakuti kota-kota lain. Kota mencoba bekerja sama untuk menangkap orang lain. Memprioritaskan merebut kota dengan banyak orang rendahan.
Jalankan: node empire
sumber
knights - lowborns/2
, tetapi jika Anda memiliki 30 ksatria dan 90 bayi rendah, ini tidak berhasil. Harap perbaikigetAttackers()
fungsi Anda .DEBUG
bendera di controller yang menyebabkannya menelan kesalahan bahkan denganGAME_MESSAGES
bendera disetel ke true. Saya merasa seperti saya masih bisa menggunakan beberapa pekerjaan pada strategi saya, terutama dengan Liberator sekarang di tempat kejadian, tetapi dengan mengedit terbaru saya tidak melihat kesalahan ketika saya menjalankan tes saya denganDEBUG
diJawa, Frankenstein
Ketika mencoba menemukan cara untuk menghancurkan Liberator, sebuah kesalahan kecil menyelinap ke dalam kode saya. Kode itu kemudian mulai menghancurkan kompetisi. Setelah menambahkan Demokrasi dan menata ulang para pemain, itu mulai gagal. Mempelajari kode saya mencoba menemukan strateginya. Akibatnya, kode berikut dibuat. Ia cenderung menyerang dan menghancurkan pemain terbaik. Setelah pemain terbaik dihancurkan, ini dengan mudah menghancurkan sisanya.
Inilah pemain aslinya:
sumber
Jawa, Penyu
Berkat TheBestOne untuk metode inti, saya baru saja mengubah algoritma (saya harap tidak apa-apa). Bot ini pada dasarnya meningkatkan kota pertahanan terbaiknya untuk menyaingi kota musuh paling berbahaya, sambil menjaga ksatria yang cukup untuk mencegah pemberontakan di kota-kota lainnya.
Menyusun:
javac Turtle.java
Menjalankan:
java Turtle
sumber
dangerousEnemyTown = dangerousEnemyTown.knightCount() >= town.knightCount() ? dangerousEnemyTown : town;
tidak bermaksuddangerousEnemyTown = bestDefendedTown.knightCount() >= town.knightCount() ? bestDefendedTown : town;
Java 8, Politisi
Bertingkah seperti politisi sejati. Sayang sekali Crasher masih membunuhnya.
Menyusun:
javac Politician.java
Menjalankan:
java Politician
sumber
lie
metodeJava 8, Mentega
Sebarkan dirinya serata mungkin. Smothers kota jika kota itu cukup kecil.
Menyusun:
javac Butter.java
Menjalankan:
java Butter
sumber
Jawa, Revolusionis
Yang terakhir, masih didasarkan pada metode inti TheBestOne. Bot ini mencoba untuk menghasut pemberontakan di setiap kota, karena pemain netral tidak ofensif, dengan membunuh sejumlah ksatria relatif terhadap penduduk rendahan. Tentu saja itu tidak akan menyerang pemain netral.
Menyusun:
javac Revolutionist.java
Menjalankan:
java Revolutionist
sumber
JAVA, Sehtimianer
Terima kasih lagi kepada TheBestOne, saya menyalin metode intinya juga; ) Ini adalah pertama kalinya saya memainkan KingOfTheHill-CodeGame, jadi saya harap saya melakukan semuanya dengan benar. Saya dengan bangga mempersembahkan Sehtimianers: D
Sehtimianers mencoba menjadi yang terbaik di seluruh permainan dan menyelesaikannya di akhir. Saya harap bot saya tidak terlalu buruk :)
sumber
Jawa, Keluaran
Sekali lagi, berdasarkan pada metode inti TheBestOne. Bot ini bermigrasi dari kota ke kota begitu mencapai tingkat tertentu dari populasi ksatria, tanpa pandang bulu pemiliknya, dan mengulangi proses ini sampai ia mengubah seluruh dunia.
Menyusun:
javac Exodus.java
Menjalankan:
java Exodus
sumber
Python 2, Demokrasi
Raja ini bukan raja. Itu sesuatu yang modern. Itu raja orang . Ini demokrasi. Ini lambat, tidak efisien, dan ketika ia melakukan sesuatu, ia melakukan kesalahan.
Lari
python2 democracy.py
. Perhatikan bahwa demokrasi membutuhkan Python 2 .Sunting: Memperbaiki bug tentang mencetak objek kota
sumber
<__main__.Town
.C ++ 11, CalculatedFail
setelah saya mencoba beberapa hal dengan Java kecil yang saya tahu dan tidak cukup mampu mencapai apa yang saya inginkan, saya memilih untuk menulis ulang di C ++ dan menambahkan penanganan file. Masalahnya adalah, C + + saya cukup berkarat dan tidak jauh lebih baik, sehingga beberapa bagian dipukul bersama dan hanya solusi pertama di google, jadi kode tidak benar-benar berkualitas ...
masih, saya bisa mendapatkan hasil kerja setidaknya yang tidak menyedot sebanyak itu, itu menang setidaknya kadang-kadang, tetapi saya tidak bisa mengujinya dengan sempurna karena saya tidak dapat menjalankan semua pengiriman lainnya pada pc ini. Saya mungkin akan menulis ulang penargetan sama sekali dan akan menambahkannya sebagai jawaban lain hari ini atau besok.
kompilasi dengan:
g++ -std=c++11 CalculatedFail.cpp -o CalculatedFail.exe
google mengatakan di linux itu CalculatedFail.out bukan .exe, tetapi saya tidak bisa mengujinya.
dan lari
CalculatedFail.exe
karena menggunakan file untuk memeriksa bonus def, menjalankan game secara bersamaan beberapa kali dapat menyebabkan kesalahan ...
berharap ini berfungsi dengan baik tanpa banyak masalah
sumber
Jawa, Illuminati
Saya membaca ini dan tahu bahwa saya tidak akan pernah bisa membuat strategi yang bagus, jadi saya memutuskan untuk memainkan orang-orang kadal yang kurang terwakili yang mungkin atau mungkin tidak memerintah kita. Alih-alih berkelahi dengan bot lain, yang satu ini memaksa mereka untuk bekerja sama, hanya untuk meninggalkan mereka di akhir. Bot ini, pada kenyataannya, tidak meninggalkan kerusakan permanen.
sumber
Java, SuperProducer
Ini sudah terlambat di bagian dunia saya sehingga saya tidak punya cukup waktu untuk menguraikan pengajuan saya. Saya akan, berencana untuk menguraikan cara kerjanya nanti.
Performa bot tampaknya sangat tergantung pada urutan awal dan memenangkan beberapa waktu ...
Saya memang memiliki beberapa ide untuk membantu meningkatkan putaran kemenangan ... tetapi tidak tahu waktu: P
Kompilasi: javac SuperProducer.java
Jalankan: java moogiesoft.SuperProducer
sumber
C ++ 11, attackOn3
kode itu sendiri tidak mendapatkan jauh lebih cantik, tetapi sekarang saya menggunakan cara lain untuk menargetkan, mungkin akan menambahkan komentar ke kode nanti.
tampaknya baik-baik saja dengan bot yang saya jalankan, meskipun masih sulit vs frankenstein dan pembebas dan tidak bisa menang secara konsisten.
kompilasi dengan:
g++ -std=c++11 attackOn3.cpp -o attackOn3.exe
dan jalankan
attackOn3.exe
sumber