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
sumber
[closed]
pada akhirnya cenderung membuat pemirsa biasa melewatkan membaca tantangan saya karena mereka; D menganggapnya berkualitas rendah atau di luar topik.Jawaban:
Tidak bisa diraih
bercabang dari Undyable .
Mengingat biaya eksponensial dari peningkatan, mungkin juga meningkatkan pertanian jika kita tidak dapat meningkatkan penyembuhan, memungkinkan bot untuk mengumpulkan emas lebih efisien.
sumber
if
pernyataan pertama kali digunakan<=
- saat ini tidak akan pernah pulih sepenuhnya.ThanosBot
Ada terlalu banyak bot, tidak cukup emas untuk berkeliling. Bot ini mengusulkan solusi.
Genosida, ya, tapi acak, tidak memihak, adil bagi kaya dan miskin.
Mereka memanggilnya orang gila.
ThanosBot menginginkan yang terbaik untuk komunitas bot, dan bersedia melakukan apa saja. Pada awalnya, ia akan meningkatkan serangannya, bertani dan menyembuhkan, agar lebih efisien mengumpulkan sumber daya dan memenangkan pertempuran. Secara progresif, ia akan mulai menyerang orang secara acak sambil masih mengumpulkan sumber daya, untuk pertempuran yang akan datang. Dia akan terus meningkatkan pasukannya, senjatanya, dan dirinya sendiri.
Setelah 50% dari populasi telah dieliminasi, bot yang lahir hanya akan mengetahui perut penuh dan langit cerah, ia akan pensiun ke kehidupan bertani, dan menyaksikan matahari terbit di alam semesta yang bersyukur. Dia akan menjadi benar-benar pasifis, hanya menyembuhkan dirinya sendiri dengan sup sayur dan bertani.
sumber
Bunuh Stealer
Sekarang tidak hanya mencuri membunuh, tetapi mencuri mencuri membunuh juga!
Bot ini tidak melakukan banyak hal selain pertanian, dan ketika menyadari kemungkinan, bergabung dalam melakukan pukulan terakhir ke musuh yang sekarat, dan entah bagaimana berhasil menjadi sangat baik.
sumber
Equalizer
Bot ini berupaya memulihkan perdamaian di komunitas bot. Dia tanpa henti menargetkan bot dengan serangan tertinggi, menyerah hanya jika penyembuhan bot lebih baik daripada serangannya sendiri. Begitu tidak ada bot dengan penyembuhan yang lebih buruk dari serangannya, ia akan pensiun ke kehidupan pertanian yang damai.
sumber
Optimis
Anggaplah ia dapat menghabiskan 80% waktunya untuk bertani secara damai, jadi ia memulai dengan memaksimalkan pertanian, dan baru kemudian mulai memperhatikan keterampilan tempurnya. Tentunya tidak ada yang salah!
sumber
Bunuh Assist
Mengapa meningkatkan nilai serangan ketika Anda dapat melakukan plink damage dan masih mendapatkan kredit penuh?
Sekali lagi kembali untuk membonceng Kill Stealer. Saya dapat menyederhanakan beberapa blok kode di mana pernyataan selalu benar dan mengutak-atik sejumlah angka yang menghasilkan keuntungan besar atas yang asli.
Saya harus menyerahkannya ke @dzaima karena menyadari bahwa memukau lawan kaya yang kemungkinan akan terlibat dalam membantu pergantian sebelum pembunuhan terjadi cukup pintar. Salah satu (sangat) beberapa kali
Stun()
memiliki hasil penjumlahan positif. Sekali lagi saya dapat memperbaiki ide tersebut, karena mengetahui bahwa Kill Stealer akan menjalankan logika yang sama, Kill Assist mencari target "terbaik kedua" (dengan beberapa pertimbangan) dan malah mengejutkan mereka.Pembaruan kecil untuk mencegah memesona bot-tentang-untuk-mati dan mencegah memesona bot-paling-kemungkinan-untuk-membuat-membunuh-.
Hasil sampel (terpotong 5 besar setelah 1000 pertandingan)
sumber
runGame(1) results: [...] captFarmer: 13768
Bot yang Tidak Dapat Diabaikan (v3)
sumber
PatientStrategistBot
Saya mencoba menulis bot yang mulai membingkai dan membela sesuai kebutuhan dan kemudian beralih untuk membunuh bot bernilai tinggi lainnya di kemudian hari dalam permainan.
Saat ini ini tampaknya tidak berfungsi dengan baik karena baik dibunuh oleh sekelompok pembunuh-bots di awal permainan atau terjebak di suatu tempat dalam mode ofensifnya.
Masih cukup senang dengan ini menjadi kode JS pertama saya, jadi ... (Saya mencuri cuplikan kode dari sini & di sana karena itu lebih cepat daripada googling semua sintaks dasar JS)
sumber
Swiss
Seperti namanya, bot ini
netralsebagian besar netral (sekarang membantu membunuh bot yang akan mati) dan hanya bertani dan menyembuhkan, perlahan-lahan membangun emasnya (seperti swiss)sumber
Bot Yang Bertani, Menyerang, Melindungi, Dan Bahkan Menyembuhkan Tapi Tidak Pernah Stun
(Nama pendek adalah TBTFASAEHBNS , jangan salah dengan TBTPTGCBCBA )
Bot ini pada dasarnya:
Sunting 1: Memperbaiki masalah dan meningkatkan beberapa hal kecil di bot berdasarkan tes dengan banyak game.
Sunting 2: Peningkatan perisai yang dikurangi.
sumber
SniperBot
Bot ini hanya akan efektif jika seseorang mulai menambahkan bot yang benar-benar menyerang secara teratur. SmartFarmer adalah solusi optimal saya saat ini
burung nasar tidak perlu serangan
sumber
int
) pada baris 2. ReferenceError: kesehatan tidak ditentukan.me.hp
?if(me.hp <30 && ...)
dapat disederhanakan menjadi hanya klausa pertama karena membutuhkan tingkat penyembuhan yang absurd untuk masalah (lvl 65)BullyDozerBot
Mashup dari BullyBot dan beberapa bit lainnya. Optimist memiliki serangan oportunistik singkat dan manis yang saya pikirkan (meskipun bot lain melakukan perhitungan yang sama).
Alih-alih menggertak target dengan memukau mereka, itu membunuh mereka karena jarahan mereka yang manis dan manis. Ini juga menargetkan yang terlemah dalam kawanan untuk digertak, tetapi itu akan menyerah dan hanya bertani jika HP target terlemah terlalu tinggi.
sumber
FizzBuzz
Bot yang paling ofensif. Sangat kesal dengan kenyataan bahwa itu tidak bisa benar-benar FizzBuzz sehingga hanya Buzzes yang marah. Ketika itu bukan Fizzing atau Buzzing, itu chip di bot lain selama 30 putaran dan menyerah dan memilih bot lain untuk menargetkan jika tidak membuat kemajuan.
Tampil luar biasa tidak konsisten.Tidak apa-apa, memperbarui controller, sekarang sepertinya selalu ada di tengah-tengah paket.sumber
bullyBot
Cobalah online!
Mungkin tidak menang tetapi pasti akan mencoba yang terbaik untuk memastikan targetnya juga tidak. bullyBot juga bertani pada giliran pertama sehingga jika tidak ada pengaruh luar, ia akan mengalahkan targetnya 5-0 atau mengikatnya 5-5.
sumber
JustFarm
Saya pikir saya akan mulai sederhana.
sumber
ScavengerBot (V2)
Menyadari itu bukan pemulung sebelumnya. Strategi baru adalah menunggu sampai dapat membunuh bot lain. Jika tidak ada yang bisa terbunuh, ia duduk dan membangun perisai.
sumber
me.levels.attacl
?Murung
Strategi default Moody adalah meningkatkan pertanian dan penyembuhan untuk sementara waktu, lalu mengeluarkan bot lain dalam urutan nilai yang menurun. Namun, jika diserang, ia akan menjadi takut dan fokus kembali pada penyembuhan sebentar. Jika serangan dan "gagal", karena korban lebih menyembuhkan atau melindungi daripada serangan, korban akan marah dan pergi untuk meningkatkan kemampuan menyerang.
sumber
Bandit
Upaya pertama pada bot pembelajaran penguatan. Murni untuk saat ini mempersempit ruang pencarian. Semacam spinoff yang lebih cerdas dari FizzBuzz - ini mengulangi serangkaian tindakan khusus sebanyak lima kali; Kelima tindakan inilah yang dipilih oleh RL.
Tapi sebagian besar didasarkan pada penghitungan untuk saat ini - saya baru saja menghasilkan semua 3 ^ 5 = 243 permutasi dari serangkaian lima tindakan defensif yang berulang sendiri, dan menyimpan skor rata-rata mereka (dibagi 200, untuk mendapatkan keuntungan rata-rata lebih dari lima putaran) lebih dari 100 iterasi dalam
storage.prior
array. Kemudian, selama pertandingan, itu menerapkan pendekatan epsilon-serakah untuk memperbarui daftar skor tersebut sehingga lebih bukti di masa depan. (Juga karena menggunakan epsilon = 0,3 memang jauh lebih baik daripada epsilon = 0,1 jadi saya hanya menyimpannya.)Tidak apa-apa, secara konsisten menempatkan antara scavengerBot dan Optimist. Saat ini saya sedang melakukan beberapa pelatihan lebih lanjut tentang permainan nyata, dan mencari cara yang lebih baik untuk membingkai strategi, untuk melihat apakah saya dapat memperbaikinya.
sumber
Oportunis
Yang ini meminjam sedikit dari beberapa orang lain (terutama ScavengerBot (V2) dan Unkillable) karena mereka memiliki ide yang sama yang ada dalam pikiran saya, tetapi saya umumnya menyukai gaya yang serba bisa dan jack-of-all-trade lebih dari hanya berfokus pada satu-satunya. satu atau dua hal. Ini mungkin berarti bahwa saya tidak akan menang, tetapi itu harus di tengah-tengah di suatu tempat (yang terjadi pada saya sebagian besar waktu dalam banyak hal).
Jadi itu mencuri pembunuhan berair; menyembuhkan jika perlu; meningkatkan pertanian, menyerang, dan menyembuhkan dalam urutan itu; dan peternakan sebaliknya.
sumber
others
ScaredBot
highest attack * (25% of bots)
, atau mendekati ujung bawahHP + shield
, maka perisai< 50
, itu akan sembuh.Idenya adalah untuk tetap hidup sedapat mungkin dan coba dapatkan emas dengan cara yang aman dan murah untuk dapat ditingkatkan.
Prioritas peningkatan mungkin harus disesuaikan, serta kondisi saat menentukan apakah akan melindungi.
sumber
SmartFarmer
Pertanian, meningkatkan pertanian, menyembuhkan jika kesehatannya rendah. Pertanian tampaknya dikuasai habis sampai bot yang benar-benar ofensif tiba. Sekarang bot saya terbunuh :-(
sumber
Mort
Setiap belokan, membandingkan keuntungan diamortisasi dari membunuh setiap bot dengan pertanian dan penyembuhan dan memilih opsi terbaik. Benar-benar harus menggunakan keadaan untuk mencari tahu berapa lama waktu yang dibutuhkan untuk membunuh bot, tetapi untuk saat ini hanya mengasumsikan setiap bot menyembuhkan atau melindungi rata-rata 5 poin per putaran dari kerusakan bot lainnya.
sumber
Bot ramah
others[0].hp
adalahhp + shield
bukanhp
...sumber
Akuntan
Bot praktis ini menghitung langkah yang paling menguntungkan secara ekonomi, tetapi ia suka menjaga profil serangannya tetap rendah untuk menghindari masalah dari semua bot main hakim sendiri. Dia tidak mencoba untuk memilih membantu yang tidak berdaya atau memangsa mereka. Sebaliknya, dia melakukan apa yang paling membantunya.
sumber
reallyCommittedTurtle
Ini masalahnya. Sudah sangat berbahaya di luar sana. Bertani sama sekali meningkatkan nilai Anda, membuat Anda menjadi target. Jadi benar-benar tidak aman untuk bertani sampai Anda telah membangun perisai besar dan semua kekerasan telah mereda. Kemudian Anda bisa mencungkil kepala Anda dari cangkang dan mulai bertani. Atau membunuh-membantu. Apa pun yang membayar lebih baik.
sumber
Wali
Saya dapat memiliki lebih dari satu pengiriman, bukan?
Garpu dari CampBot. Tidak melindungi, melainkan berfokus pada serangan. Menunjukkan preferensi untuk menyerang pemain dengan statistik serangan yang lebih tinggi, daripada menyerang secara acak seperti CampBot. Berfokus pada peningkatan pertaniannya daripada penyembuhan.
sumber
let victim=potentialVictims[Math.floor(Math.random()*potentialVictims.length)]
Rando
Pria konyol ini akan memilih tindakan berdasarkan keacakan seragam dengan beberapa bias. Jika tindakan yang dipilih secara acak tidak akan berhasil, maka tindakan itu turun ke pilihan berikutnya.
Jadi rata-rata, ia harus menyerang hampir 2/9 waktu dan pertanian hampir 3/9 waktu. Sisanya sekitar 1/9 kesempatan jika ia dapat meningkatkan, atau jika penyembuhan / perisai sepadan, dll.
Dia kemungkinan tidak akan tampil baik, tetapi setidaknya ada kemungkinan kecil bahwa dia berkuasa. Dan itulah seluruh tujuan Rando. Dia hanya perlu percaya pada dirinya sendiri! Semua opsi diletakkan di depannya. Dia hanya perlu memilih apa yang dibutuhkan untuk situasi apa pun.
(Saya tahu "default" tidak perlu, tapi saya pikir ini adalah praktik pengkodean yang baik untuk kode yang kuat.)
sumber
Bunuh Bot
Bot sederhana, Kill Bot hanya ingin membunuh musuhnya. Karena perisai jauh lebih efisien daripada penyembuhan (terutama ketika diratakan), Kill Bot hanya berusaha untuk selalu menjadi target yang tidak menarik dengan melindungi dirinya sendiri setiap kali diserang. Kill Bot cukup baik di antara bot lemah, pasifis di sekitar sini (Anda bisa merasakan cemoohan bagi mereka).
sumber
o.attack
ini adalah level serangan, bukan kerusakannyaFarmHeal Bot
Dihasilkan dari bot @Anonymous 'JustFarm
sumber
Tidak bisa dihancurkan
Modifikasi bot Draco18, menggunakan perisai (lebih efektif terhadap bot lain)
sumber