CodeBots 2: Desain Berbasis Acara


11

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 Amelalui 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 Cakan berisi nomor baris dari kondisi yang benar, dan kemudian baris itu akan dieksekusi. Di akhir setiap belokan, Cakan bertambah.

Ada beberapa kondisi yang tersedia:

  1. Starthanya berlaku pada belokan pertama. Anda harus memiliki ini dalam kode Anda tepat sekali
  2. BotAt(N) benar jika ada bot di lokasi yang ditentukan oleh N
  3. Equals(A,B) benar jika A sama dengan B. Mereka bisa menjadi tipe yang berbeda, jika demikian, mereka tidak akan sama.
  4. Modified(A)benar jika Adisalin selama giliran terakhir. Aharus berupa nama variabel, garis, atau kondisi
  5. Any(C1,C2,...) benar jika salah satu kondisinya benar
  6. None(C1,C2,...) itu benar jika tidak ada kondisi yang benar
  7. All(C1,C2,...) benar jika semua kondisi itu benar
  8. Not(C)benar jika C salah. Cpasti 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.

  1. A, B, C, D,E
  2. Angka dari 0 hingga 23
  3. This akan mengembalikan nomor baris saat ini
  4. Add(N1,N2,...) akan mengembalikan jumlah semua nilai
  5. Sub(N1,N2) akan mengembalikan N1 dikurangi N2
  6. Mult(N1,N2,...) akan mengembalikan produk dari semua nilai
  7. Div(N1,N2) akan mengembalikan N1 dibagi dengan N2
  8. Mod(N1,N2) akan mengembalikan N1 mod N2
  9. OVar(N) akan menerima nama variabel, dan akan mengembalikan variabel lawan
  10. Line(N) akan mengembalikan baris N di kode Anda
  11. Type(N) akan mengembalikan jenis baris ke-N dalam kode Anda (jenisnya adalah nama tindakan)
  12. Cond(N) akan mengembalikan kondisi pada baris ke-N
  13. CondType(N) akan mengembalikan jenis kondisi pada baris ke-N (jenisnya adalah nama-nama kondisi)
  14. OLine(N) akan mengembalikan garis Nth dalam kode lawan Anda
  15. OType(N) akan mengembalikan jenis garis Nth dalam kode lawan Anda
  16. OCond(N) akan mengembalikan kondisi pada baris ke-N
  17. OCondType(N) akan mengembalikan tipe kondisi pada baris ke-N

Adan Buntuk penggunaan pribadi Anda, Cdigunakan untuk menentukan baris mana yang harus dieksekusi dalam kode Anda, dan Ddigunakan sebagai arah. Setiap nilai Dmerujuk pada pasangan kuadrat dan arah yang berbeda. Emenghasilkan nilai acak setiap kali. Ddan Eakan 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:

  1. Moveakan memindahkan Anda 1 persegi ke depan Dke arah th. Jika ada bot di sana, Anda tidak akan bergerak.
  2. Copy(A,B)akan menyalin variabel Ake B. Btidak boleh berupa nilai numerik, kecuali untuk nama variabel. Adan Btidak boleh dari tipe yang berbeda. Menyalin garis tidak menyalin kondisi.
  3. Flagtidak melakukan apa-apa. Bot dengan flag terbanyak dalam kode Anda akan mendapatkan poin. Bot dengan poin terbanyak menang.
  4. If(C,L1,L2)akan melakukan baris pada L1jika Cbenar, yang lain melakukan L2. Cadalah suatu kondisi, dan L1dan L2harus 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 Startakan 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.

IfPernyataan 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 Cbertambah 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

  1. 893.9 Borg
  2. 1.3 LazyLioness
  3. 0,9 Bek
  4. 0,5 Flagger
  5. 0,4 CliqueBot
  6. 0,4 berbahaya
  7. 0,3 Penyerang
  8. 0,3 Gard
  9. 0,3 SingleTarget
  10. 0,2 FreezeBot
  11. 0,2 Sentinel
  12. 0,2 Driveby
  13. 0,0 Anti-berbahaya
  14. 0,0 MoveBot
  15. 0,0 CliqueBorg
  16. 0,0 Kalkulator
  17. 0,0 TestBot
  18. 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 Xjumlah saat dilihat oleh lawan . CVariabel lawan juga akan diimbangi dengan Xjumlah yang sama . Xtidak akan berubah dalam game yang sama, tetapi itu akan berubah dari game ke game.


Nathan: Apakah Anda bisa melihat "Lazy Lioness" untuk melihat apakah bug yang saya laporkan adalah sah (atau jika saya baru saja makan siang)? Tidak terburu-buru. Pastikan Anda mengetahui kiriman tersebut.
COTO

@COTO Maaf, sekolah sudah gila. Saya akan mencoba untuk melakukannya malam ini.
Nathan Merrill

Kondisi 'Semua' dapat dibuat tersirat untuk setiap daftar kondisi yang dipisahkan koma. Itu akan membuat membaca entri sedikit lebih mudah.
ccarton

Saya rasa saya menemukan bug Anda. Objek FuctionParser digunakan sebagai kunci dalam HashMap yang berarti Anda memerlukan metode yang sama dengan yang tepat. Ini memperbaiki masalah dengan CliqueBot dan kemungkinan Lazy Lioness juga. Saya mengirimi Anda permintaan tarik.
ccarton

@carton, HashMap hanya mem-memoize nilai-nilai, itu tidak digunakan untuk menguji kesetaraan
Nathan Merrill

Jawaban:


13

Borg

Ubah semua bot lain menjadi klon sendiri. Resistensi adalah sia-sia.

Start:Copy(2,A)                               # Cloning will begin at line 2
All(Not(BotAt(D)),Not(Equals(2,A))):Copy(2,A) # Reset A if the opp left before we were done
Not(BotAt(D)):Move
All(Equals(Line(Sub(This,3)),OLine(0)),Equals(Line(Sub(This,2)),OLine(1)),Equals(Line(Sub(This,1)),OLine(2)),Equals(Line(This),OLine(3)),Equals(Line(Add(This,1)),OLine(4)),Equals(Line(Add(This,2)),OLine(5)),Equals(Line(Add(This,3)),OLine(6)),Equals(Line(Add(This,4)),OLine(7)),Equals(Line(Add(This,5)),OLine(8))):Copy(E,D) #  Check if cloning is complete
All(Equals(A,2),Not(Equals(OCond(1),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(1)) # Copy freeze cond to OLine(1) before cloning starts
All(Equals(A,2),Not(Equals(OLine(1),Line(Add(This,3))))):Copy(Line(Add(This,3)),OLine(1)) # Copy freeze line
Not(Equals(Cond(Add(Sub(This,6),A)),OCond(A))):Copy(Cond(Add(Sub(This,6),A)),OCond(A))    # Copy Cond(A) to OCond(A)
Not(Equals(Line(Add(Sub(This,7),A)),OLine(A))):Copy(Line(Add(Sub(This,7),A)),OLine(A))    # Copy Line(A) to OLine(A)
Equals(A,A):Copy(Add(A,1),A) # Increment A. It will wrap around all 24 lines before the completion check matches

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.


Hei, bisakah kita mengobrol tentang bot ini? chat.stackexchange.com/rooms/17128/…
Nathan Merrill

@Nathan, apakah Anda menggunakan versi terbaru dari entri ini dalam proses terbaru?
ccarton

Saya kagum bahwa bot ini dapat menginfeksi bot lain dengan sangat sukses. Saya ingin melihat ikhtisar tentang cara kerjanya.
Sparr

@carton no. Saya tidak menyadari itu diperbarui. Menjalankan kembali.
Nathan Merrill

@Sparr Saya telah menambahkan beberapa komentar. Harapan itu membuatnya lebih mudah diikuti. Saya pikir bot sangat efektif karena efek eksponensial dari kloning. Setiap bot yang diinfeksi keluar dan menginfeksi yang lain. Juga, mereka secara alami akan mencoba untuk saling memperbaiki ketika mereka mengalami kerusakan.
ccarton


3

Kalkulator

Bot ini tidak mengerti tujuan dari tantangan ini, jadi dia memutuskan untuk menghitung beberapa angka untuk musuh.

Equals(Mod(OVar(E),5),0):Copy(Add(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),1):Copy(Sub(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),2):Copy(Mult(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),3):Copy(Div(OVar(A),OVar(B)),OVar(D))
Equals(Mod(OVar(E),5),4):Copy(Mod(OVar(A),OVar(B)),OVar(D))
Start:Move

Anda harus memasukkan hasilnya ke dalam OVar(D)tidak A!
MegaTom

@MegaTom Selesai;)
CommonGuy

3

CliqueBot

Flag
Start: Copy(11,B)
Not(Equals(Line(20),Line(21))): If(Equals(Line(21),Line(22)),Line(7),Line(8))
Not(Equals(Line(21),Line(22))): If(Equals(Line(20),Line(21)),Line(9),Line(10))
All(BotAt(D),Not(Equals(11,OVar(B)))): If(Equals(Line(20),OLine(OVar(C))),Line(10),Line(11))
Any(BotAt(D),Equals(E,B)): Copy(Add(D,1),D)
Equals(1,1): Move
Copy(Line(21),Line(20))
Copy(Line(20),Line(21))
Copy(Line(21),Line(22))
If(Equals(Line(20),OLine(Sub(OVar(C),1))),Line(5),Line(12))
Copy(Line(20),OLine(OVar(C)))
Copy(Line(20),OLine(E))

Mengenali teman melalui Bnilainya, 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.


Saya rasa saya menemukan bug di controller. Saya mengiriminya permintaan tarik. Sampai dia menerimanya, Anda dapat mencoba garpu saya jika Anda suka dan beri tahu saya jika itu berhasil untuk Anda.
ccarton

Bug telah diperbaiki di versi terbaru.
Nathan Merrill

2

Pembela

Start:Copy(0,A)
Copy(0,B)
Flag
Flag
All(Modified(Line(2)),Equals(A,0)):Copy(1,A)
Copy(Line(3),Line(2))
Copy(0,A)
Copy(10,C)
All(Modified(Line(3)),Equals(B,0)):Copy(1,B)
Copy(Line(2),Line(3))
Copy(0,B)
BotAt(D):Copy(Line(2),OLine(E))


2

Penyerang

Start:Move
BotAt(D):Copy(Line(Add(Mod(E,6),4)),OLine(E))
Any(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Move
None(BotAt(0),BotAt(1),BotAt(2),BotAt(3)):Copy(E,D)

BotAt(D):Copy(Line(X),OLine(E))di mana baris X berisi Equals(1,1):Flag... untuk bersenang
seequ

@Sieg Linehanya menyalin aksinya, bukan kondisinya.
MegaTom

Taktik saya yang terlalu kuat :(
seequ

2

Target tunggal

Start:Move
All(BotAt(D),Not(Equals(OVar(D),D))): Copy(D,OVar(D))
BotAt(D):Copy(Line(E),OLine(E))
Equals(A,A):Move

Akan memburumu dan mengisimu dengan bendera!


The Allkondisi membutuhkan)
Nathan Merrill

2

Berbahaya

Start:Flag           # comments -->                                                                                 # why move when we can fit another flag here?
Equals(E,0):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                  # 1/24 chance to turn left or right
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(Add(This,4))))):Copy(Cond(Add(This,4)),OCond(Sub(OVar(C),1)))    # Copy the freeze condition
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(Add(This,4))))):Copy(Line(Add(This,4)),OLine(Sub(OVar(C),1)))    # Copy the flag-copying line
All(BotAt(D),Not(Equals(OLine(Add(OVar(C),0)),Line(Add(This,Add(4,Mod(E,14))))))):Copy(Line(Add(This,Add(4,Mod(E,14)))),OLine(Add(OVar(C),0))) # copy one of my flags to them
BotAt(D):Copy(Add(D,Sub(Mult(2,Mod(E,2)),1)),D)                                                                     # turn left or right if we've infected our target
Equals(A,A):Move                                                                                                    # move if all else fails, also infection freeze condition
Copy(Line(Add(This,1)),Line(Add(This,Mod(E,22))))                                                                   # infection line 1
Flag                                                                                                                # first of many flags

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.


Line(4)dapat disederhanakan sedikit. Add(OVar(C),0)sama dengan OVar(C)dan Add(This,Add(4,Mod(E,14)))sama denganAdd(This,4,Mod(E,14)) .
MegaTom

@MegaTom Saya melakukan Add pertama yang tidak perlu untuk membuat bagian logis dari garis sebelumnya berbaris. Yang kedua adalah karena tidak mengetahui bahwa Add dapat mengambil banyak parameter. Terima kasih
Sparr

1

Gard

Start: Move
BotAt(D):IF(Equals(Line(7),OLine(C)),Line(6),Line(5))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
Copy(Line(7),OLine(OVar(C)))
Copy(Cond(7),OCond(Sub(OVar(C),1)))

Menyerang robot apa pun di sebelahnya.


Baris terakhir Anda tidak dapat menyalin dari suatu kondisi ke baris.
Nathan Merrill

@NathanMerrill Saya baru saja memperbaikinya ...
MegaTom

OConperluOCond
Nathan Merrill

1

Bekukan Bot

Start:Move
All(BotAt(D),Not(Equals(OCond(1),Cond(5)))):Copy(Cond(5),OCond(1))
All(BotAt(D),Not(Equals(OLine(1),Line(6)))):Copy(Line(6),OLine(1))
All(BotAt(D),Equals(Mod(OVar(A),24),0)):Copy(Add(D,1),D)
BotAt(D):Copy(Line(20),OLine(OVar(A)))
Equals(A,A):Move
Copy(Add(A,1),A)

Menjebak Anda dalam satu lingkaran. Melarang Avariabel Anda sendiri , lalu mengisi Anda dengan bendera dan pindah ke korban berikutnya.


Baris 3: Silakan ganti D + 1 dengan Tambah (D, 1)
Nathan Merrill

Anda mengasumsikan bahwa Start berada pada baris nol. Sekarang semua orang diberi insentif untuk memulai Start mereka di jalur 2. Ini akan mengarah pada tren peningkatan / pengiriman kembali yang konyol :(
Sparr

1

Peniru

Start:Move
BotAt(D):If(OCond(0),OLine(0),Line(2))
If(OCond(1),OLine(1),Line(3))
If(OCond(2),OLine(2),Line(4))
If(OCond(3),OLine(3),Line(5))
If(OCond(4),OLine(4),Line(6))
If(OCond(5),OLine(5),OLine(OVar(C)))
Not(BotAt(D)):If(BotAt(Add(D,1)),Line(8),Line(0))
Copy(Add(D,1),D)

Prediksikan apa yang akan Anda lakukan, lalu lakukan itu.


Silakan ganti D + 1 dengan Tambah (D, 1)
Nathan Merrill

Juga, Anda tidak bisa meneruskan perintah sebagai garis. Anda harus masuk OLineatau aLine
Nathan Merrill

@NathanMerrill siap berangkat! (Setidaknya saya pikir itu)
MegaTom

Bot ini benar-benar membuat kode saya melalui beberapa masalah, tapi itu salah saya, bukan milik Anda. Ada beberapa bug, tolong taruh di Linesekitar 2, dan Add(D,1)bukannyaD+1
Nathan Merrill

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 pada BotAt()kondisi) juga mengevaluasi truepada saat tidak ada bot yang berdekatan. Akhirnya, Movedan Copyarahan 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

All(Not(Equals(Line(18),Line(21))),Equals(Line(21),Line(22))):Copy(Line(21),Line(18))
All(Not(Equals(Line(21),Line(22))),Equals(Line(22),Line(18))):Copy(Line(22),Line(21))
All(Not(Equals(Line(22),Line(18))),Equals(Line(18),Line(21))):Copy(Line(18),Line(22))
All(Any(BotAt(Add(D,1)),BotAt(Add(D,2)),BotAt(Add(D,3))),Not(BotAt(D))):Move
All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,1))),All(BotAt(Add(D,1)),BotAt(Add(D,2)))),Not(BotAt(Add(D,3)))):Copy(Add(D,3),D)
Any(All(Any(All(BotAt(D),BotAt(Add(D,2))),All(BotAt(D),BotAt(Add(D,3))),All(BotAt(Add(D,2)),BotAt(Add(D,3)))),Not(BotAt(Add(D,1)))),All(BotAt(Add(D,1)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19))))):Copy(Add(D,1),D)
All(BotAt(Add(D,3)),BotAt(D),Any(Equals(OCond(2),Cond(20)),Equals(OLine(2),Line(19)))):Copy(Add(D,3),D)
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Not(Equals(OLine(2),Line(19)))):Copy(Cond(20),OCond(2))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(3),Line(18)))):Copy(Line(18),OLine(3))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(4),Line(21)))):Copy(Line(21),OLine(4))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(0),Cond(22)))):Copy(Cond(22),OCond(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(0),Line(17)))):Copy(Line(17),OLine(0))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OCond(1),Cond(21)))):Copy(Cond(21),OCond(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(1),Line(20)))):Copy(Line(20),OLine(1))
All(BotAt(D),Equals(OCond(2),Cond(20)),Not(Equals(OLine(2),Line(19)))):Copy(Line(19),OLine(2))
All(BotAt(D),Not(Equals(OCond(2),Cond(20))),Equals(OLine(2),Line(19))):Copy(Add(D,A),D)
Equals(E,1):Copy(Add(A,2),A)
Any(Equals(E,4),Equals(E,8)):Copy(Add(D,E,A),D)
Not(Equals(A,A)):Flag
Not(Equals(A,A)):Copy(Line(3),OLine(E))
Equals(A,A):Move
Any(Equals(E,4),Equals(E,5),Equals(E,6),Equals(E,7),Equals(E,8),Equals(E,9)):Flag
Any(Equals(E,10),Equals(E,11),Equals(E,12),Equals(E,13)):Flag
Start:Copy(1,A)

Saya tidak dapat melihat bug, tetapi untuk berjaga-jaga Anda mungkin harus menggunakan Modifiedkondisi alih-alihEquals
MegaTom

cliqueBot sepertinya memiliki masalah yang sama. Saya pikir ini adalah bug penyusun.
MegaTom

@MegaTom: ModifiedKondisi 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. ;)
COTO

Saya rasa saya menemukan bug di controller. Saya mengiriminya permintaan tarik. Sampai dia menerimanya, Anda dapat mencoba garpu saya jika Anda suka dan beri tahu saya jika itu berhasil untuk Anda.
ccarton

1

penjaga

perbaikan pada Gard. Temukan bot terdekat dengan bendera di 8 baris pertama. (yaitu, semua yang paling sering digunakan)

flag
flag
Start:Copy(11,B)
All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):If(Equals(OVar(D),Add(D,2)),Line(7),Line(8))
BotAt(Add(D,1)):Copy(Add(D,1),D)
BotAt(Add(D,2)):Copy(Add(D,2),D)
BotAt(Add(D,3)):Copy(Add(D,3),D)
copy(D,OVar(D))
copy(Line(Mod(E,2)),OLine(Mod(E,8)))
Not(Equals(Line(0),Line(1))):copy(Line(Add(9,Mod(E,16))),Line(Mod(E,2)))

Saya pikir Anda memiliki bracket yang salah tempat pada jalur 3. Not pertama tidak ditutup dengan benar. Saya pikir seharusnyaAll(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
ccarton

1

CliqueBorg

Flag
BotAt(D): Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1): Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start: Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))

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).


Silakan ganti Plus dengan Tambah dan Minus dengan Sub
Nathan Merrill

1

Driveby

Satu percobaan terakhir sebelum batas waktu.

Flag
Flag
BotAt(D):Copy(Line(Sub(This,1)),OLine(E))
Equals(1,1):Copy(Line(Sub(This,2)),Line(Add(This,Mod(E,21))))
Start:Move
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),1)),Line(3)))):Copy(Line(3),OLine(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),1)),Cond(3)))):Copy(Cond(3),OCond(Sub(OVar(C),1)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),2)),Line(2)))):Copy(Line(2),OLine(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),2)),Cond(2)))):Copy(Cond(2),OCond(Sub(OVar(C),2)))
All(BotAt(D),Not(Equals(OLine(Sub(OVar(C),3)),Line(1)))):Copy(Line(1),OLine(Sub(OVar(C),3)))
All(BotAt(D),Not(Equals(OCond(Sub(OVar(C),3)),Cond(4)))):Copy(Cond(4),OCond(Sub(OVar(C),3)))
BotAt(D):Copy(Add(D,1),D)
Equals(1,1):Move
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.