Selamat datang di Kode Bot 2!
Anda telah mempelajari pelajaran Anda sejak Bot Kode terakhir. Anda telah mencoba mencari tahu lebih banyak cara agar sesuai dengan lebih banyak tindakan dalam lebih sedikit baris, dan sekarang akhirnya Anda memilikinya. Anda akan membuat Code Bot berbasis acara.
Bot Anda harus terdiri dari 24 baris. Setiap baris mengikuti salah satu dari dua format:
Condition:Action
atau
Action
Bot Anda juga memiliki cukup storage untuk menyimpan 5 bilangan bulat bernama A
melalui E
. Integer dapat menyimpan nilai dari 0 hingga 23.
Setiap belokan, Anda akan menjalankan baris C
, kecuali jika salah satu dari kondisi itu benar. Jika demikian, maka C
akan berisi nomor baris dari kondisi yang benar, dan kemudian baris itu akan dieksekusi. Di akhir setiap belokan, C
akan bertambah.
Ada beberapa kondisi yang tersedia:
Start
hanya berlaku pada belokan pertama. Anda harus memiliki ini dalam kode Anda tepat sekaliBotAt(N)
benar jika ada bot di lokasi yang ditentukan oleh NEquals(A,B)
benar jika A sama dengan B. Mereka bisa menjadi tipe yang berbeda, jika demikian, mereka tidak akan sama.Modified(A)
benar jikaA
disalin selama giliran terakhir.A
harus berupa nama variabel, garis, atau kondisiAny(C1,C2,...)
benar jika salah satu kondisinya benarNone(C1,C2,...)
itu benar jika tidak ada kondisi yang benarAll(C1,C2,...)
benar jika semua kondisi itu benarNot(C)
benar jika C salah.C
pasti suatu kondisi.
Variabel bisa dalam salah satu format berikut. 9 yang pertama adalah angka, dan dapat digunakan untuk setiap kali N digunakan di halaman ini.
A
,B
,C
,D
,E
- Angka dari 0 hingga 23
This
akan mengembalikan nomor baris saat iniAdd(N1,N2,...)
akan mengembalikan jumlah semua nilaiSub(N1,N2)
akan mengembalikan N1 dikurangi N2Mult(N1,N2,...)
akan mengembalikan produk dari semua nilaiDiv(N1,N2)
akan mengembalikan N1 dibagi dengan N2Mod(N1,N2)
akan mengembalikan N1 mod N2OVar(N)
akan menerima nama variabel, dan akan mengembalikan variabel lawanLine(N)
akan mengembalikan baris N di kode AndaType(N)
akan mengembalikan jenis baris ke-N dalam kode Anda (jenisnya adalah nama tindakan)Cond(N)
akan mengembalikan kondisi pada baris ke-NCondType(N)
akan mengembalikan jenis kondisi pada baris ke-N (jenisnya adalah nama-nama kondisi)OLine(N)
akan mengembalikan garis Nth dalam kode lawan AndaOType(N)
akan mengembalikan jenis garis Nth dalam kode lawan AndaOCond(N)
akan mengembalikan kondisi pada baris ke-NOCondType(N)
akan mengembalikan tipe kondisi pada baris ke-N
A
dan B
untuk penggunaan pribadi Anda, C
digunakan untuk menentukan baris mana yang harus dieksekusi dalam kode Anda, dan D
digunakan sebagai arah. Setiap nilai D
merujuk pada pasangan kuadrat dan arah yang berbeda. E
menghasilkan nilai acak setiap kali. D
dan E
akan diinisialisasi ke nilai acak, jika tidak 0
.
Arah yang digunakan adalah [North,East,South,West][D%4]
. Lawan Anda adalah bot di kotak langsung ke arah itu.
Ada 4 tindakan yang tersedia untuk Anda:
Move
akan memindahkan Anda 1 persegi ke depanD
ke arah th. Jika ada bot di sana, Anda tidak akan bergerak.Copy(A,B)
akan menyalin variabelA
keB
.B
tidak boleh berupa nilai numerik, kecuali untuk nama variabel.A
danB
tidak boleh dari tipe yang berbeda. Menyalin garis tidak menyalin kondisi.Flag
tidak melakukan apa-apa. Bot dengan flag terbanyak dalam kode Anda akan mendapatkan poin. Bot dengan poin terbanyak menang.If(C,L1,L2)
akan melakukan baris padaL1
jikaC
benar, yang lain melakukanL2
.C
adalah suatu kondisi, danL1
danL2
harus berupa garis.
Gambar besar
50 salinan setiap bot akan ditempatkan di dunia. Tujuan Anda adalah membuat bendera Anda menjadi bot sebanyak mungkin. Untuk setiap bot yang memiliki lebih banyak jenis bendera Anda daripada jenis bendera lainnya, Anda mendapatkan poin.
Bot akan ditempatkan sebagai berikut:
B...B...B...B...
..B...B...B...B.
B...B...B...B...
Akan ada 10 pertandingan berjalan, dan poin akan dirata-ratakan di semua permainan, menentukan siapa pemenangnya.
Catatan Samping
Jika beberapa kondisi berlaku, maka salah satu yang paling segera mengikuti Start
akan dieksekusi
Bot akan dikemas dengan cermat tetapi Anda tidak akan memulai bot lain yang berdekatan. (Secara teknis formatnya akan sama dengan CodeBots terakhir)
Karena tantangan ini tidak diposting di kotak pasir (untuk memberi siapa pun keuntungan), saya berhak untuk mengubah detail kecil untuk keadilan, atau kemampuan tambahan. Juga, jika ada bug di runner CodeBots, saya akan mengubahnya, bahkan jika bot bergantung pada bug itu untuk keberhasilannya. Saya berusaha seadil mungkin.
If
Pernyataan rekursif tidak akan dieksekusi
Jika bot Anda lebih pendek dari 24 baris, baris yang tersisa akan diisi Flag
Ingat ketika menyalin ke Anda sendiri C
, itu C
bertambah pada akhir giliran Anda.
Penerjemah CodeBots dapat ditemukan di sini . Ini termasuk file .jar untuk eksekusi yang mudah. Cukup tambahkan bot Anda ke folder bot
Skor
- 893.9 Borg
- 1.3 LazyLioness
- 0,9 Bek
- 0,5 Flagger
- 0,4 CliqueBot
- 0,4 berbahaya
- 0,3 Penyerang
- 0,3 Gard
- 0,3 SingleTarget
- 0,2 FreezeBot
- 0,2 Sentinel
- 0,2 Driveby
- 0,0 Anti-berbahaya
- 0,0 MoveBot
- 0,0 CliqueBorg
- 0,0 Kalkulator
- 0,0 TestBot
- 0,0 Peniru
MEMPERBARUI
Baris kode sekarang diputar ketika Anda melihat kode lawan Anda. Itu berarti, garis lawan 1 Anda mungkin garis 14 (atau garis apa pun). Bot akan memiliki offset tetap yang akan mengimbangi garisnya dengan X
jumlah saat dilihat oleh lawan . C
Variabel lawan juga akan diimbangi dengan X
jumlah yang sama . X
tidak akan berubah dalam game yang sama, tetapi itu akan berubah dari game ke game.
sumber
Jawaban:
Borg
Ubah semua bot lain menjadi klon sendiri. Resistensi adalah sia-sia.
Sunting: Perbaikan kecil untuk mengatur ulang A jika lawan bergerak sebelum saya selesai dengannya. Tampaknya tidak mempengaruhi skor tetapi itu membuat saya merasa lebih baik.
Sunting # 2: Menambahkan cek yang lebih lengkap untuk memastikan proses kloning telah selesai dengan benar (baris 3)
Sunting # 3: Perbarui untuk menangani offset acak baru. Kesulitan di sini adalah bahwa klon baru akan memiliki kode mereka terletak di offset acak yang berarti mereka tidak tahu lokasi jalur mereka sendiri. Itu berarti bahwa semua referensi ke baris saya sendiri harus relatif (ke
This
). Nomor baris lawan masih bisa absolut karena mereka tetap acak.sumber
Flagger
Tembak untuk bulan
Dan sisanya diisi otomatis dengan bendera.
sumber
Kalkulator
Bot ini tidak mengerti tujuan dari tantangan ini, jadi dia memutuskan untuk menghitung beberapa angka untuk musuh.
sumber
OVar(D)
tidakA
!CliqueBot
Mengenali teman melalui
B
nilainya, mengisi garis orang lain dengan bendera. Juga berusaha keras untuk menjaga integritas salah satu benderanya sendiri (bagian ini lucu tapi mungkin tidak terlalu berguna).Sunting: Tidak mengejutkan, tampaknya ada bug di sini di suatu tempat, dilihat dari skor.Curiga bahwa baris 0-diindeks dan kode saya 1-diindeks. Harus benar-benar memeriksanya sebelumnya. Menambahkan Bendera di awal untuk menambah semuanya.
sumber
Pembela
sumber
MoveBot
sumber
Copy(23,C)
?Penyerang
sumber
BotAt(D):Copy(Line(X),OLine(E))
di mana baris X berisiEquals(1,1):Flag
... untuk bersenangLine
hanya menyalin aksinya, bukan kondisinya.Target tunggal
Akan memburumu dan mengisimu dengan bendera!
sumber
All
kondisi membutuhkan)
Berbahaya
Ide yang mirip dengan bot dengan nama yang sama di kontes sebelumnya. Bergerak sampai saya menekan bot lain, kemudian membekukannya ke dalam loop menimpa kode sendiri dengan bendera saya. Kali ini bot yang terinfeksi menimpa garis acak daripada garis berurutan, membuat proses infeksi sedikit kurang efektif tetapi jauh lebih cepat.
sumber
Line(4)
dapat disederhanakan sedikit.Add(OVar(C),0)
sama denganOVar(C)
danAdd(This,Add(4,Mod(E,14)))
sama denganAdd(This,4,Mod(E,14))
.Gard
Menyerang robot apa pun di sebelahnya.
sumber
OCon
perluOCond
Bekukan Bot
Menjebak Anda dalam satu lingkaran. Melarang
A
variabel Anda sendiri , lalu mengisi Anda dengan bendera dan pindah ke korban berikutnya.sumber
Peniru
Prediksikan apa yang akan Anda lakukan, lalu lakukan itu.
sumber
OLine
atau aLine
Line
sekitar2
, danAdd(D,1)
bukannyaD+1
Lioness malas
Awalnya hanya "Lioness", pengajuan pertama saya ke kontes mendapatkan gelar "malas" dengan benar-benar tidak melakukan apa-apa ketika diperkenalkan ke dalam simulator.
Kelesuannya sebenarnya disebabkan oleh bug (atau mungkin kesalahpahaman saya pada model acara) di mana kondisi dalam tiga baris pertama (pemeriksaan paritas sederhana untuk memastikan bahwa bendera tidak ditimpa) kadang-kadang, secara tak dapat dievaluasi mengevaluasi
true
, mengunci leo di loop lemniscate . Beberapa kondisi lain (terutama yang bergantung padaBotAt()
kondisi) juga mengevaluasitrue
pada saat tidak ada bot yang berdekatan. Akhirnya,Move
danCopy
arahan jelas diabaikan ketika melangkah melalui simulator. Karena rantai logika kondisional saya agak epik, ada banyak ruang untuk bug dalam kode saya dan dalam simulator. ;)Dalam kasus apa pun, saya mengirimkan Lazy Lioness sebagai kasus uji untuk diagnosis kesalahan atau debugging simulator, yang diharapkan akan mengarah pada munculnya Lioness yang tidak terlalu malas yang kemudian dapat saya simulasikan dan perbaiki sebagai pengajuan bonafid pertama saya ke Bots. kompetisi v2.
Tidak Ada Apa-apanya
sumber
Modified
kondisi alih-alihEquals
Modified
Kondisi ini merupakan undangan untuk loop tak terbatas. Jika saya tidak dapat menggunakan cek paritas, saya hanya akan menghapus garis sepenuhnya. Cari tahu sesuatu yang berguna untuk dimasukkan ke dalam mereka. ;)penjaga
perbaikan pada
Gard
. Temukan bot terdekat dengan bendera di 8 baris pertama. (yaitu, semua yang paling sering digunakan)sumber
All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
CliqueBorg
Mencoba untuk menggabungkan teknologi CliqueBot dan Borg untuk membuat bot yang mengenali salinan dirinya meskipun garis offset. Itu juga memulai proses penyalinannya pada baris kode terakhir yang dieksekusi pada bot yang berlawanan, daripada baris 0, yang lebih cenderung membekukannya tetapi juga lebih mungkin menghasilkan salinan yang rusak (pada kenyataannya, saya tidak yakin ini bahkan berfungsi, saya belum mengujinya dan ini cukup rumit).
sumber
Driveby
Satu percobaan terakhir sebelum batas waktu.
sumber