CodeBots 2: Thiết kế hướng sự kiện


11

Chào mừng bạn đến với Mã Bots 2!

Bạn đã học được bài học của mình kể từ Bots Code cuối cùng. Bạn đã cố gắng tìm ra nhiều cách hơn để phù hợp với nhiều hành động hơn trong ít dòng hơn và cuối cùng bạn đã có nó. Bạn sẽ tạo một Bot Bot hướng sự kiện.

Bot của bạn phải bao gồm 24 dòng. Mỗi dòng theo một trong hai định dạng:

Condition:Action

hoặc là

Action

Bot của bạn cũng có đủ dung lượng để lưu trữ 5 số nguyên có tên Athông qua E. Một số nguyên có thể lưu trữ các giá trị từ 0 đến 23.

Mỗi lượt, bạn sẽ thực hiện dòng C, trừ khi một trong các điều kiện là đúng. Nếu vậy, thì sau đó Csẽ chứa số dòng của điều kiện là đúng, và sau đó dòng đó sẽ được thực thi. Vào cuối mỗi lượt, Csẽ được tăng lên.

Có các điều kiện có sẵn:

  1. Startchỉ đúng trong lượt đầu tiên. Bạn phải có mã này chính xác một lần
  2. BotAt(N) là đúng nếu có một bot tại vị trí được xác định bởi N
  3. Equals(A,B) là đúng nếu A bằng B. Chúng có thể là các loại khác nhau, nếu vậy, chúng sẽ không bằng nhau.
  4. Modified(A)là đúng nếu Ađược sao chép trong lượt cuối cùng. Aphải là một tên biến, một dòng hoặc một điều kiện
  5. Any(C1,C2,...) là đúng nếu bất kỳ điều kiện nào là đúng
  6. None(C1,C2,...) là đúng nếu không có điều kiện nào đúng
  7. All(C1,C2,...) là đúng nếu tất cả các điều kiện là đúng
  8. Not(C)đúng nếu C sai. Cphải là một điều kiện.

Các biến có thể ở một trong các định dạng sau. 9 đầu tiên là số và có thể được sử dụng cho bất cứ khi nào N được sử dụng trong trang này.

  1. A, B, C, D,E
  2. Một số từ 0 đến 23
  3. This sẽ trả về số dòng hiện tại
  4. Add(N1,N2,...) sẽ trả về tổng của tất cả các giá trị
  5. Sub(N1,N2) sẽ trả về N1 trừ N2
  6. Mult(N1,N2,...) sẽ trả lại sản phẩm của tất cả các giá trị
  7. Div(N1,N2) sẽ trả về N1 chia cho N2
  8. Mod(N1,N2) sẽ trả về N1 mod N2
  9. OVar(N) sẽ chấp nhận một tên biến và sẽ trả về biến của đối thủ
  10. Line(N) sẽ trả về dòng thứ N trong mã của bạn
  11. Type(N) sẽ trả về loại dòng thứ N trong mã của bạn (các loại là tên của các hành động)
  12. Cond(N) sẽ trả lại điều kiện trên dòng thứ N
  13. CondType(N) sẽ trả về loại điều kiện trên dòng thứ N (các loại là tên của các điều kiện)
  14. OLine(N) sẽ trả về dòng thứ N trong mã của đối thủ của bạn
  15. OType(N) sẽ trả về loại dòng thứ N trong mã của đối thủ của bạn
  16. OCond(N) sẽ trả lại điều kiện trên dòng thứ N
  17. OCondType(N) sẽ trả về loại điều kiện trên dòng thứ N

ABdành cho sử dụng cá nhân của bạn, Cđược sử dụng để xác định dòng nào sẽ thực thi trong mã của bạn và Dđược sử dụng làm hướng. Mỗi giá trị Dđề cập đến một cặp vuông và hướng khác nhau. Etạo ra một giá trị ngẫu nhiên mỗi lần. DEsẽ được khởi tạo thành một giá trị ngẫu nhiên, nếu không 0.

Hướng sử dụng sẽ là [North,East,South,West][D%4]. Đối thủ của bạn là bot trong quảng trường ngay lập tức theo hướng đó.

Có 4 hành động dành cho bạn:

  1. Movesẽ di chuyển bạn 1 hình vuông về phía trước Dtheo hướng thứ. Nếu có bot ở đó, bạn sẽ không di chuyển.
  2. Copy(A,B)sẽ sao chép biến Avào B. Bkhông thể là một giá trị số, ngoại trừ một tên biến. ABkhông thể có nhiều loại khác nhau. Sao chép một dòng không sao chép điều kiện.
  3. FlagKhông lam gi cả. Bot có nhiều cờ nhất trong mã của bạn sẽ nhận được điểm. Bot có nhiều điểm nhất sẽ thắng.
  4. If(C,L1,L2)sẽ thực hiện dòng trên L1nếu Cđúng, khác thực hiện L2. Clà một điều kiện, L1L2phải là dòng.

Bức tranh lớn

50 bản sao của mỗi bot sẽ được đặt trên thế giới. Mục tiêu của bạn là đưa cờ của bạn vào càng nhiều bot càng tốt. Đối với mỗi bot có nhiều loại cờ của bạn hơn bất kỳ loại cờ nào khác, bạn sẽ nhận được một điểm.

Các bot sẽ được đặt như sau:

B...B...B...B...
..B...B...B...B.
B...B...B...B...

Sẽ có 10 trò chơi được chạy và điểm sẽ được tính trung bình trên tất cả các trò chơi, xác định ai là người chiến thắng.

Ghi chú bên

Nếu nhiều điều kiện được áp dụng, thì điều kiện tiếp theo ngay lập tức Startsẽ được thực thi

Các bot sẽ được đóng gói chặt chẽ nhưng bạn sẽ không bắt đầu một bot khác. (Về mặt kỹ thuật, nó sẽ có cùng định dạng với CodeBots cuối cùng)

Vì thử thách này không được đăng trong hộp cát (để không cho ai có lợi thế), tôi bảo lưu quyền thay đổi các chi tiết nhỏ cho công bằng hoặc các khả năng bổ sung. Ngoài ra, nếu có lỗi trong trình chạy CodeBots, tôi sẽ thay đổi nó, ngay cả khi một bot phụ thuộc vào lỗi đó để thành công. Tôi đang cố gắng công bằng nhất có thể.

IfBáo cáo đệ quy sẽ không được thực thi

Nếu bot của bạn ngắn hơn 24 dòng, các dòng còn lại sẽ được lấp đầy Flag

Hãy nhớ khi sao chép vào chính bạn C, đó Clà tăng vào cuối lượt của bạn.

Trình thông dịch CodeBots có thể được tìm thấy ở đây . Nó bao gồm một tập tin .jar để thực hiện dễ dàng. Chỉ cần thêm bot của bạn vào thư mục bot

Điểm số

  1. 893.9
  2. 1.3 Lười biếng
  3. 0,9 Hậu vệ
  4. 0,5 Flagger
  5. 0,4 CliqueBot
  6. 0,4 ngấm ngầm
  7. 0,3 kẻ tấn công
  8. 0,3
  9. 0,3 Mục tiêu đơn
  10. 0,2 FreeBot
  11. 0,2 Sentinel
  12. 0,2 ổ
  13. 0,0 Chống độc
  14. Di chuyển 0,0
  15. 0,0 CliqueBorg
  16. Máy tính 0,0
  17. 0,0 TestBot
  18. Kẻ bắt chước 0,0

CẬP NHẬT

Các dòng mã hiện được xoay khi bạn xem mã của đối thủ. Điều đó có nghĩa là, dòng 1 của đối thủ của bạn có thể là dòng 14 (hoặc bất kỳ dòng nào). Một bot sẽ có một phần bù cố định sẽ bù các dòng của anh ta theo Xsố lượng khi được đối thủ xem . Biến của đối thủ Ccũng sẽ được bù bằng Xsố tiền tương tự . Xsẽ không thay đổi trong cùng một trò chơi, nhưng nó sẽ thay đổi từ trò chơi này sang trò chơi khác.


Nathan: Bạn có thể kiểm tra "Lazy Lioness" để xem các lỗi tôi đã báo cáo có hợp pháp không (hoặc nếu tôi vừa ra ngoài ăn trưa)? Không vội. Chỉ cần chắc chắn rằng bạn biết về trình.
COTO

@COTO Xin lỗi, trường học thật điên rồ. Tôi sẽ cố gắng để có được nó tối nay.
Nathan Merrill

Điều kiện 'Tất cả' có thể được đặt ẩn cho bất kỳ danh sách điều kiện nào được phân tách bằng dấu phẩy. Nó sẽ làm cho việc đọc các mục dễ dàng hơn một chút.
ccarton

Tôi nghĩ rằng tôi đã tìm thấy lỗi của bạn. Các đối tượng FractionParser đang được sử dụng làm khóa trong HashMap, có nghĩa là bạn cần một phương thức bằng đúng. Điều này cũng khắc phục sự cố với CliqueBot và có khả năng là Lazy Lioness. Tôi đã gửi cho bạn một yêu cầu kéo.
ccarton

@ccarton HashMap chỉ ghi nhớ các giá trị, nó không được sử dụng để kiểm tra sự bình đẳng
Nathan Merrill

Câu trả lời:


13

Ếch

Chuyển đổi tất cả các bot khác thành bản sao của chính nó. Kháng chiến là vô ích.

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

Chỉnh sửa: Khắc phục nhỏ để đặt lại A nếu đối thủ di chuyển trước khi tôi hoàn thành với anh ta. Dường như không ảnh hưởng đến điểm số nhưng nó làm tôi cảm thấy tốt hơn.

Chỉnh sửa # 2: Đã thêm một kiểm tra đầy đủ hơn để đảm bảo quá trình nhân bản đã hoàn thành đúng (dòng 3)

Chỉnh sửa # 3: Cập nhật để xử lý các offset ngẫu nhiên mới. Khó khăn ở đây là các bản sao mới sẽ có mã của chúng nằm ở vị trí ngẫu nhiên, điều đó có nghĩa là chúng không biết vị trí của các dòng riêng. Điều đó có nghĩa là tất cả các tham chiếu đến các dòng riêng của tôi phải tương đối (đến This). Số dòng đối thủ vẫn có thể là tuyệt đối vì dù sao chúng là ngẫu nhiên.


Này, chúng ta có thể trò chuyện về bot này không? chat.stackexchange.com/rooms/17128/...
Nathan Merrill

@Nathan, bạn đã sử dụng phiên bản mới nhất của mục này trong lần chạy gần đây nhất chưa?
ccarton

Tôi ngạc nhiên rằng bot này có thể lây nhiễm các bot khác rất thành công. Tôi rất muốn thấy một bản tóm tắt về cách thức hoạt động của nó.
Sparr

@ccarton không. Tôi không nhận ra nó đã được cập nhật. Chạy lại.
Nathan Merrill

@Sparr Tôi đã thêm một số ý kiến. Hy vọng rằng làm cho nó dễ dàng hơn để làm theo. Tôi nghĩ rằng bot rất hiệu quả vì hiệu ứng theo cấp số nhân của nhân bản. Mỗi bot nó lây nhiễm đi ra ngoài và lây nhiễm cho người khác. Ngoài ra, họ sẽ tự nhiên cố gắng sửa chữa lẫn nhau khi chúng bị hư hại.
ccarton


3

Máy tính

Bot này không hiểu mục tiêu của thử thách này, vì vậy anh quyết định tính toán một số con số cho kẻ thù.

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

bạn có nên đưa kết quả vào OVar(D)không A!
MegaTom

@MegaTom Xong;)
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))

Nhận ra bạn bè thông qua Bgiá trị của họ , lấp đầy các dòng của người khác bằng cờ. Cũng đi đến một số độ dài để bảo vệ tính toàn vẹn của một trong những lá cờ của riêng nó (phần này dễ thương nhưng có lẽ không hữu ích lắm).

Chỉnh sửa: Không có gì đáng ngạc nhiên, dường như có một lỗi ở đây ở đâu đó, đánh giá bằng điểm số.

Nghi ngờ rằng các dòng là 0-index và mã của tôi là 1-index. Nên thực sự đã kiểm tra mà sớm hơn. Đã thêm một lá cờ ở đầu để tăng mọi thứ lên một.


Tôi nghĩ rằng tôi đã tìm thấy lỗi trong bộ điều khiển. Tôi đã gửi cho anh ấy một yêu cầu kéo. Cho đến khi anh ấy chấp nhận nó, bạn có thể thử ngã ba của tôi nếu bạn thích và cho tôi biết nếu nó hoạt động cho bạn.
ccarton

Lỗi đã được sửa trong phiên bản mới nhất.
Nathan Merrill

2

Hậu vệ

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

Kẻ tấn công

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))trong đó dòng X chứa Equals(1,1):Flag... cho vui
xem

@Sieg Linechỉ sao chép hành động, không phải điều kiện.
MegaTom

Chiến thuật áp đảo của tôi :(
seequ

2

Mục tiêu duy nhất

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

Sẽ săn lùng bạn và lấp đầy bạn với cờ!


Điều Allkiện cần một)
Nathan Merrill

2

Xảo quyệt

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

Ý tưởng tương tự với bot cùng tên trong cuộc thi trước. Di chuyển cho đến khi tôi nhấn một bot khác, sau đó đóng băng nó thành một vòng lặp ghi đè mã của chính nó bằng cờ của tôi. Lần này các bot bị nhiễm ghi đè lên các dòng ngẫu nhiên thay vì các dòng liên tiếp, làm cho quá trình lây nhiễm kém hiệu quả hơn một chút nhưng nhanh hơn nhiều.


Line(4)có thể được đơn giản hóa một chút. Add(OVar(C),0)là giống OVar(C)Add(This,Add(4,Mod(E,14)))là giống như Add(This,4,Mod(E,14)).
MegaTom

@MegaTom Tôi đã thực hiện Thêm không cần thiết đầu tiên để làm cho các phần logic của các dòng trước xếp thành hàng. Cái thứ hai là do không biết rằng Add có thể lấy nhiều tham số. Cảm ơn
Sparr

1

Làm vườn

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

Tấn công bất kỳ robot bên cạnh nó.


Dòng cuối cùng của bạn không thể sao chép từ một điều kiện sang một dòng.
Nathan Merrill

@NathanMerrill Tôi vừa sửa nó ...
MegaTom

OConcần phải cóOCond
Nathan Merrill

1

Bot đóng băng

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)

Bẫy bạn trong một vòng lặp Kết hợp với Abiến của chính bạn , sau đó lấp đầy bạn bằng cờ và chuyển sang nạn nhân tiếp theo.


Dòng 3: Vui lòng thay thế D + 1 bằng Thêm (D, 1)
Nathan Merrill

Bạn đang giả sử rằng Bắt đầu là dòng không. Bây giờ mọi người đều được khuyến khích đưa Bắt đầu của họ lên dòng 2. Điều này sẽ dẫn đến một xu hướng leo thang / gửi lại ngớ ngẩn :(
Sparr

1

Kẻ bắt chước

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)

Dự đoán những gì bạn sẽ làm, sau đó làm điều đó.


Vui lòng thay thế D + 1 bằng Thêm (D, 1)
Nathan Merrill

Ngoài ra, bạn không thể truyền vào một lệnh dưới dạng một dòng. Bạn có thể phải vượt qua trong một OLinehoặc mộtLine
Nathan Merrill

@NathanMerrill đã sẵn sàng để đi! (Ít nhất tôi nghĩ là vậy)
MegaTom

Bot này thực sự đặt mã của tôi thông qua một số rắc rối, nhưng đó là lỗi của tôi, không phải của bạn. Có một vài lỗi, vui lòng đặt Linexung quanh 2Add(D,1)thay vìD+1
Nathan Merrill

1

Sư tử lười biếng

Ban đầu chỉ là "Lioness", lần đầu tiên tôi tham gia cuộc thi đã nhận được danh hiệu "lười biếng" bằng cách thực sự không làm gì khi được đưa vào trình giả lập.

Sự thờ ơ của cô ấy thực tế là do một lỗi (hoặc có thể là sự hiểu lầm của tôi về mô hình sự kiện) trong đó các điều kiện trong ba dòng đầu tiên (một kiểm tra chẵn lẻ đơn giản để đảm bảo rằng các cờ không bị ghi đè) đôi khi, đánh giá một cách không thể giải thích được true, khóa leo trong vòng lặp lemniscate . Một số điều kiện khác (đặc biệt là các điều kiện dựa vào BotAt()điều kiện) cũng đánh giá truevào những thời điểm không có bot bên cạnh. Cuối cùng, Movevà các Copychỉ thị rõ ràng bị bỏ qua khi bước qua trình giả lập. Vì các chuỗi logic có điều kiện của tôi có phần hoành tráng, có rất nhiều chỗ cho các lỗi trong mã của tôi trong trình giả lập. ;)

Trong mọi trường hợp, tôi gửi Lazy Lioness như một trường hợp thử nghiệm để chẩn đoán lỗi hoặc gỡ lỗi giả lập, điều này hy vọng sẽ dẫn đến sự xuất hiện của Lioness không lười biếng mà sau đó tôi có thể mô phỏng và tinh chỉnh như là lần đầu tiên tôi gửi cho Bots thi đấu v2.

Nó không làm gì cả

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)

Tôi không thể thấy một lỗi, nhưng chỉ trong trường hợp bạn có thể nên sử dụng Modifiedđiều kiện thay vì một sốEquals
MegaTom

cliqueBot có vẻ như có cùng một vấn đề. Tôi nghĩ đó là một lỗi biên dịch.
MegaTom

@MegaTom: Điều Modifiedkiện là một lời mời cho một vòng lặp vô hạn. Nếu tôi không thể sử dụng kiểm tra chẵn lẻ, tôi sẽ chỉ xóa toàn bộ các dòng. Tìm ra một cái gì đó hữu ích để đặt chúng. ;)
COTO

Tôi nghĩ rằng tôi đã tìm thấy lỗi trong bộ điều khiển. Tôi đã gửi cho anh ấy một yêu cầu kéo. Cho đến khi anh ấy chấp nhận nó, bạn có thể thử ngã ba của tôi nếu bạn thích và cho tôi biết nếu nó hoạt động cho bạn.
ccarton

1

canh gác

ngẫu hứng trên Gard. Lượt các bot gần đó với cờ trên 8 dòng đầu tiên. (đó là tất cả những cái được sử dụng nhiều nhất)

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

Tôi nghĩ rằng bạn có một dấu ngoặc không đúng chỗ trên dòng 3. Cái đầu tiên Không được đóng đúng cách. Tôi nghĩ rằng nó nên đượcAll(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)))

Cố gắng kết hợp công nghệ CliqueBot và Borg để tạo ra một bot nhận ra các bản sao của chính nó mặc dù bù dòng. Nó cũng bắt đầu quá trình sao chép của mình ở dòng mã được thực thi cuối cùng trên bot đối diện, thay vì dòng 0, có khả năng đóng băng nó tại chỗ nhưng cũng có nhiều khả năng dẫn đến một bản sao bị hỏng (thực tế, tôi không chắc chắn điều này thậm chí hoạt động, tôi đã không thử nghiệm nó và nó khá phức tạp).


Vui lòng thay thế Plus bằng Thêm và trừ bằng Sub
Nathan Merrill

1

Lái xe

Một lần thử cuối cùng trước thời hạn.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.