Tantangan ini telah berakhir. Untuk melihat skor akhir para pesaing, klik di sini
Dalam tantangan ini, setiap pengiriman adalah satu bot. Setiap bot harus merupakan fungsi Javascript. Bot akan berjuang untuk mendapatkan total nilai tertinggi dalam emas. Emas dapat diternakkan, atau diperoleh dari membunuh bot lain, dan digunakan untuk meningkatkan penyembuhan, serangan, perisai, dan pertanian.
Objektif:
Lebih dari sejumlah putaran yang berisi hingga 1000 putaran (berakhir ketika hanya satu bot yang tersisa), bot dengan nilai total tertinggi (jumlah semua emas yang diperoleh) adalah pemenangnya.
Ternyata:
Di setiap belokan, setiap bot yang hidup (> 0 HP) akan dijalankan sekali. Itu bisa mengembalikan gerakan, yang bisa menjadi salah satu dari yang berikut:
- Sembuh: Mendapatkan kembali HP
- Attack: Menghapus HP dari bot lain
- Shield: Bertahan dari serangan selanjutnya
- Stun: Melewati giliran bot lain
- Peternakan: Menghasilkan emas dengan biaya HP
- Tingkatkan: Buat gerakan tertentu lebih baik
Semua bot akan mengembalikan gerakan mereka sebelum ada yang dieksekusi, jadi setrum, sembuhkan, serang, perisai, dll. Tidak akan memengaruhi bot yang bergerak di kemudian hari pada giliran itu. Sebagai contoh, jika Bot A setrum Bot B, dan Bot B adalah setelah Bot A dalam urutan belokan, Bot B masih akan bergerak kemudian di belokan yang sama dan setrum akan terjadi pada belokan berikutnya.
Memerangi, Bertani, dan Meningkatkan:
Setiap bot memiliki HP maksimum 100, dan UID yang ditetapkan antara 0 dan 99. UID ini berubah setelah setiap putaran, dan bagaimana bot melacak satu sama lain.
Penyembuhan adalah salah satu langkah paling sederhana, menambahkan jumlah HP yang ditentukan oleh levelnya (mulai dari 5 HP). Bot tidak dapat menyembuhkan melebihi 100 HP.
Menyerang bot dengan UID-nya adalah langkah lain yang mungkin, dengan kerusakan dasar sebesar 5 HP pada level 0. Bot juga dapat dibuat terpana, melewatkan giliran berikutnya, yang juga menggunakan UID.
Bot memiliki perisai tambahan HP, yang tidak memiliki batas. Perisai ini HP akan menyerap kerusakan dari serangan langsung dari bot lain, dan ditambahkan dengan perisai. Pada level 0, perisai menambahkan 5 perisai HP.
Pertanian akan menghasilkan 5 emas pada level 0, dengan biaya 2 HP. 2 HP ini tidak dapat dilindungi. Satu-satunya penggunaan emas (di luar kemenangan) adalah untuk meningkatkan gerakan. Penyembuhan, serangan, dan perisai memiliki nilai dasar 5 HP, dan pertanian dimulai dari 5 emas. Setiap gerakan tersebut memiliki level individual, yang dimulai dari 0. Formula ini akan menentukan nilai dalam HP atau emas gerakan, di mana L adalah level:
- Penyembuhan:
L + 5
- Menyerang:
1.25L + 5
- Melindungi:
1.5L + 5
- Pertanian:
2L + 5
Biaya untuk meningkatkan gerakan apa pun adalah sama untuk tingkat tertentu, dan ditentukan oleh 2.5L² + 2.5L + 10
, di mana L adalah tingkat saat ini. Bot dapat menggunakan fungsi cost(currentLevel)
sebagai jalan pintas untuk menentukan ini.
Bot dimulai dengan 25 emas, memungkinkan mereka untuk dengan cepat meningkatkan dua gerakan ke level 1, atau satu gerakan ke level 2. Emas awal ini tidak dihitung terhadap nilai total bot. Membunuh sebuah bot memberi Anda setengah dari total nilainya dalam emas, dibulatkan ke atas, dan jika dua bot membunuh yang lain dalam giliran yang sama, mereka berdua mendapatkan hadiah.
Input output:
Untuk berkomunikasi dengan pengontrol, nilai kembali fungsi digunakan untuk mengirim informasi bergerak. Salah satunya harus dikembalikan:
- Menyembuhkan:
heal()
- Menyerang:
attack(uid)
- Melindungi:
shield()
- Setrum:
stun(uid)
- Tanah pertanian:
farm()
- Meningkatkan:
upgrade("heal" / "attack" / "shield" / "farm")
Untuk melewati belokan (tidak melakukan apa-apa), tidak menghasilkan apa-apa, atau mengembalikan nilai palsu.
Untuk mendapatkan nomor belokan saat ini (mulai dari 1), gunakan turn()
.
Argumen fungsi Anda akan mencakup informasi tentang bot Anda, UID bot lain, dan penyimpanan antar-belokan. Argumen pertama adalah obyek dengan sifat sebagai berikut: uid
, hp
, gold
, dan shield
. Ini adalah salinan informasi bot Anda saat ini. Ada juga sebuah objek bersarang levels
, dengan angka tingkat heal
, attack
, shield
, dan farm
.
Argumen kedua adalah susunan acak semua bot hidup selain bot Anda, yang diformat sebagai objek yang berisi properti uid
, hp
(plus perisai) worth
,, dan attack
(tingkat serangan). Argumen ketiga adalah objek kosong yang dapat digunakan untuk penyimpanan antar-giliran.
Contoh Bot:
Bot ini akan bertani hingga dapat meningkatkan serangannya ke level 5, lalu menyerang bot acak setiap belokan hingga mati (atau menang). Tidak terlalu efektif karena kurang penyembuhan / perisai.
function freeTestBotA(me, others, storage) {
if (me.levels.attack < 5) {
if (me.gold < cost(me.levels.attack))
return farm();
return upgrade("attack");
}
return attack(others[0].uid);
}
Bot ini memiliki dua mode: ofensif dan defensif. Itu akan baik setrum bot acak atau sembuh ketika dalam mode defensif, dan itu akan baik menyerang atau melindungi ketika dalam mode ofensif. Itu akan berusaha untuk meningkatkan serangannya bila memungkinkan.
function freeTestBotB(me, others, storage) {
if (me.gold >= cost(me.levels.attack))
return upgrade("attack");
if (me.hp < 50)
if (Math.random() < 0.5)
return stun(others[0].uid);
else
return heal();
else
if (Math.random() < 0.5)
return attack(others[0].uid);
else
return shield();
}
Aturan:
- Standar Lubang terlarang
- Bot mungkin tidak membaca, memodifikasi, atau menambahkan variabel apa pun di luar ruang lingkupnya, mungkin tidak mencoba untuk menipu, dan tidak dapat memanggil fungsi DOM yang ditentukan pengendali atau
- Nilai pengembalian harus salah, atau salah satu dari fungsi keluaran di atas
- Bot tidak boleh dirancang untuk menargetkan bot tertentu, tetapi dapat dirancang untuk memanfaatkan strategi umum
- Bot tidak boleh menyerang diri mereka sendiri (ditemukan karena komentar oleh @Ness)
- Bot harus cukup berbeda dari bot lain sehingga dapat dianggap entri yang terpisah
- Teaming sekarang tidak diizinkan
- Kontroler dapat ditemukan di sini
- Ruang obrolan
Debugging Pengendali Baru:
Menggunakan file gold-battle-log.js
, Anda dapat mengatur nilai debug
properti bot botData
ke 0 (tidak ada penebangan), 1 (bergerak log), atau 2 (bergerak log, hp, emas, level, dll.)
Tantangan berakhir pada 1700 UTC pada hari Jumat, 9 Agustus
[closed]
pada akhirnya cenderung membuat pemirsa biasa melewatkan membaca tantangan saya karena mereka; D menganggapnya berkualitas rendah atau di luar topik.