코드 봇 2 : 이벤트 중심 디자인


11

Code Bots 2에 오신 것을 환영합니다!

지난 코드 봇 이후 교훈을 배웠습니다. 더 적은 줄로 더 많은 행동을 맞출 수있는 더 많은 방법을 찾으려고 노력했습니다. 이벤트 중심 코드 봇을 만들 것입니다.

봇은 24 줄로 구성되어야합니다. 각 줄은 다음 두 형식 중 하나를 따릅니다.

Condition:Action

또는

Action

봇은를 A통해 명명 된 5 개의 정수를 저장할 수있는 충분한 스토리지를 보유 하고 E있습니다. 정수는 0에서 23 사이의 값을 저장할 수 있습니다.

각 차례, 당신은 줄을 실행합니다 C, 하지 않는 조건 중 하나에 해당합니다. 그렇다면 C참인 조건부 행 번호를 포함하고 해당 행이 실행됩니다. 매 턴이 끝날 때마다 C증가합니다.

사용 가능한 조건이 있습니다.

  1. Start첫 번째 턴에만 해당됩니다. 코드에 정확히 한 번만 있어야합니다.
  2. BotAt(N) N으로 정의 된 위치에 봇이있는 경우 true
  3. Equals(A,B) A가 B와 같으면 참입니다. 서로 다른 유형일 수 있으며, 같으면 같지 않습니다.
  4. Modified(A)A마지막 턴에 복사 된 경우 참 입니다. A변수 이름, 줄 또는 조건이어야합니다.
  5. Any(C1,C2,...) 조건 중 하나라도 해당되면 참
  6. None(C1,C2,...) 조건이 하나도 없으면 참입니다.
  7. All(C1,C2,...) 모든 조건이 참이면 참
  8. Not(C)C가 거짓이면 참입니다. C조건이어야합니다.

변수는 다음 형식 중 하나 일 수 있습니다. 처음 9는 숫자이며이 페이지에서 N을 사용할 때마다 사용할 수 있습니다.

  1. A, B, C, D,E
  2. 0에서 23 사이의 숫자
  3. This 현재있는 줄 번호를 반환합니다
  4. Add(N1,N2,...) 모든 값의 합계를 반환합니다
  5. Sub(N1,N2) N1에서 N2를 뺀 값을 반환합니다
  6. Mult(N1,N2,...) 모든 값의 곱을 반환합니다
  7. Div(N1,N2) N1을 N2로 나눈 값을 반환합니다.
  8. Mod(N1,N2) N1 mod N2를 반환합니다
  9. OVar(N) 변수 이름을 받아들이고 상대방의 변수를 반환합니다
  10. Line(N) 코드에서 N 번째 줄을 반환합니다
  11. Type(N) 코드에서 N 번째 라인 유형을 반환합니다 (유형은 액션의 이름입니다)
  12. Cond(N) N 번째 줄에서 조건을 반환합니다
  13. CondType(N) N 번째 줄에 조건 유형을 반환합니다 (유형은 조건의 이름입니다)
  14. OLine(N) 상대의 코드에서 N 번째 줄을 반환합니다
  15. OType(N) 상대방의 코드에서 N 번째 라인 유형을 반환합니다
  16. OCond(N) N 번째 줄의 조건을 반환합니다
  17. OCondType(N) N 번째 줄에 조건 유형을 반환합니다

AB개인 사용을 위해,되는 C코드에서 실행하는 라인을 결정하는 데 사용되며, D한 방향으로 사용됩니다. 의 각 값은 D서로 다른 정사각형과 방향 쌍을 나타냅니다. E매번 임의의 값을 생성합니다. DE달리, 임의의 값으로 초기화됩니다 0.

사용되는 방향은입니다 [North,East,South,West][D%4]. 당신의 상대는 그 방향으로 직각의 봇입니다.

사용 가능한 4 가지 작업이 있습니다.

  1. MoveDth 방향으로 1 칸 앞으로 이동합니다 . 거기에 봇이 있으면 움직이지 않습니다.
  2. Copy(A,B)변수 A를에 복사합니다 B. B변수 이름을 제외하고 숫자 값이 될 수 없습니다. A그리고 B다른 유형이 될 수 없습니다. 줄을 복사해도 조건이 복사되지 않습니다.
  3. Flag아무것도하지 않습니다. 코드에서 플래그가 가장 많은 봇이 포인트를 얻습니다. 가장 많은 점수를 얻은 봇이 승리합니다.
  4. If(C,L1,L2)에 선을 수행 L1하는 경우 C는 true, 그렇지 수행입니다 L2. C조건이며, L1그리고 L2줄 수 있어야합니다.

큰 그림

모든 봇의 사본은 세계에 배치됩니다. 당신의 목표는 가능한 한 많은 봇에 깃발을 넣는 것입니다. 다른 깃발 유형보다 깃발 유형이 더 많은 각 봇에 대해 포인트를 얻습니다.

봇은 다음과 같이 배치됩니다.

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

10 개의 게임이 진행되며, 모든 게임에서 승자가 누구인지를 결정하여 점수가 평균됩니다.

사이드 노트

여러 조건이 적용되면 가장 불완전하게 따르는 조건 Start이 실행됩니다.

봇은 밀집되어 있지만 다른 봇과 인접하지는 않습니다. (기술적으로 마지막 CodeBots와 동일한 형식입니다)

이 도전은 샌드 박스에 게시되지 않았기 때문에 (아무도 유리하지 않음) 공정성 또는 추가 기능을 위해 작은 세부 사항을 변경할 권리가 있습니다. 또한 CodeBots 러너에 버그가 있으면 봇이 성공을 위해 해당 버그에 의존하더라도 버그를 변경합니다. 가능한 한 공정하게 노력하고 있습니다 .

재귀 If문은 실행되지 않습니다

봇이 24 줄보다 짧은 경우 나머지 줄은 Flag

자신에 복사 할 때 기억 C이, C자신의 턴의 끝에서 증가합니다.

CodeBots 인터프리터는 여기 에서 찾을 수 있습니다 . 쉬운 실행을 위해 .jar 파일이 포함되어 있습니다. 봇을 봇 폴더에 추가하기 만하면됩니다

점수

  1. 보그
  2. 1.3 게으른
  3. 0.9 수비수
  4. 0.5 플래 거
  5. 0.4 크리크 봇
  6. 0.4 교활한
  7. 0.3 공격자
  8. 0.3 가드
  9. 0.3 싱글 타겟
  10. 0.2 동결 봇
  11. 0.2 센티넬
  12. 0.2 드라이브 바이
  13. 0.0 교활한
  14. 0.0 MoveBot
  15. 0.0 CliqueBorg
  16. 0.0 계산기
  17. 0.0 테스트 봇
  18. 0.0 모방 자

최신 정보

상대의 코드를 볼 때 코드 줄이 회전합니다. 즉, 상대방의 1 행은 14 행 (또는 모든 행) 일 수 있습니다. 봇은 상대가 볼 때X 금액만큼 라인을 상쇄하는 고정 오프셋을 갖 습니다 . 상대 C변수도 같은 X양만큼 상쇄됩니다 . X동일한 게임 내에서 변경되지는 않지만 게임에서 게임으로 변경됩니다.


Nathan : "게으른 암 사자"를 확인하여 내가보고 한 버그가 합법적인지 또는 점심을 먹으러 나가는 지 확인할 수 있습니까? 서두르지 마. 제출 내용을 알고 있는지 확인하십시오.
COTO

@COTO 죄송합니다. 학교는 미쳤습니다. 오늘 밤에 해보도록하겠습니다.
Nathan Merrill

쉼표로 구분 된 조건 목록에 대해 '모두'조건을 암시 적으로 만들 수 있습니다. 항목을 조금 더 쉽게 읽을 수 있습니다.
ccarton

나는 당신의 버그를 발견했다고 생각합니다. FuctionParser 객체는 HashMap에서 키로 사용되므로 적절한 equals 메소드가 필요합니다. 이것은 CliqueBot 및 Lazy Lioness의 문제를 해결합니다. 풀 요청을 보냈습니다.
ccarton

@ccarton HashMap은 값만 기억합니다. 평등을 테스트하는 데는 사용되지 않습니다.
Nathan Merrill

답변:


13

보그

다른 모든 봇을 자체 복제본으로 변환합니다. 저항은 무의미하다.

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

편집 : 상대가 내가 그와 함께하기 전에 이동하면 A를 재설정하는 작은 수정. 점수에 영향을 미치지는 않지만 기분이 좋아집니다.

편집 # 2 : 복제 프로세스가 제대로 완료되었는지 확인하기 위해보다 완벽한 검사가 추가되었습니다 (라인 3).

편집 # 3 : 새로운 임의 오프셋을 처리하도록 업데이트합니다. 여기서 어려움은 새로운 클론이 임의의 오프셋에 코드를 배치하여 자신의 라인 위치를 알 수 없다는 것입니다. 즉, 내 자신의 행에 대한 모든 참조는 상대적이어야합니다 This. 상대 행 번호는 어쨌든 무작위이므로 절대적 일 수 있습니다.


이 로봇에 대해 얘기 좀 할까? chat.stackexchange.com/rooms/17128/…
Nathan Merrill

@Nathan, 가장 최근에이 항목의 최신 버전을 사용 했습니까?
ccarton

이 봇이 다른 봇을 성공적으로 감염시킬 수 있다는 사실에 놀랐습니다. 작동 방식에 대한 요약을보고 싶습니다.
Sparr

@ccarton 번호 나는 그것이 업데이트되었다는 것을 몰랐다. 재실행.
Nathan Merrill

@Sparr 댓글을 추가했습니다. 그것이 더 쉽게 따라갈 수 있기를 바랍니다. 봇은 복제의 기하 급수적 효과 때문에 매우 효과적이라고 생각합니다. 감염된 각 봇은 나가서 다른 사람을 감염시킵니다. 또한 손상을 입을 때 자연스럽게 서로 수리하려고 시도합니다.
ccarton


3

계산자

이 봇은이 도전의 목표를 이해하지 못해서 적의 숫자를 계산하기로 결정했습니다.

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

결과를 넣지 OVar(D)말아야합니다 A!
MegaTom

@MegaTom Done;)
CommonGuy

3

클리크 봇

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

그들의 B가치 를 통해 친구를 인식하고 다른 모든 사람들의 줄을 깃발로 채 웁니다. 또한 자체 플래그 중 하나의 무결성을 유지하기 위해 어느 정도 시간이 걸립니다 (이 부분은 귀엽지 만 유용하지는 않습니다).

편집 : 의심 할 여지없이 점수에 따라 여기 어딘가에 버그가있는 것으로 보입니다.

줄이 0 인덱싱되고 내 코드가 1 인덱싱 된 것으로 의심하십시오. 실제로 이전에 확인해야합니다. 처음에 모든 것을 부딪 치기 위해 깃발을 추가했습니다.


컨트롤러에서 버그를 발견했다고 생각합니다. 나는 그에게 풀 요청을 보냈다. 그가 그것을 받아 들일 때까지, 당신은 당신이 좋아하면 내 포크를 시도하고 그것이 당신을 위해 작동하는지 알려주세요.
ccarton

버그는 최신 버전에서 수정되었습니다.
Nathan Merrill

2

방어자

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

공격자

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))X 행에는 Equals(1,1):Flag재미 가 있습니다 ...
sepqu

@Sieg Line는 조건이 아닌 동작 만 복사합니다.
MegaTom

나의 압도적 인 전술 :(
seequ

2

단일 대상

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

당신을 사냥하고 깃발로 당신을 채울 것입니다!


All조건이 필요)
나단 메릴

2

교활한

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

이전 콘테스트에서 같은 이름으로 봇과 유사한 아이디어를 얻었습니다. 다른 봇을 칠 때까지 이동 한 다음 내 깃발로 자체 코드를 덮어 쓰는 루프로 멈 춥니 다. 이번에는 감염된 봇이 순차적 인 줄 대신 임의의 줄을 덮어 쓰므로 감염 과정이 덜 효과적이지만 훨씬 빨라집니다.


Line(4)조금 단순화 할 수 있습니다. Add(OVar(C),0)와 동일 OVar(C)하고 Add(This,Add(4,Mod(E,14)))동일하다 Add(This,4,Mod(E,14)).
MegaTom

@MegaTom 나는 첫 번째 불필요한 Add를 수행하여 이전 행의 논리적 부분을 정렬했습니다. 두 번째는 Add가 여러 매개 변수를 사용할 수 있다는 것을 모르기 때문입니다. 감사합니다
Sparr

1

가드

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

옆에있는 로봇을 공격합니다.


마지막 줄은 조건에서 줄로 복사 할 수 없습니다.
Nathan Merrill

@NathanMerrill 나는 단지 그것을 고치고 있었다 ...
MegaTom

OCon필요OCond
Nathan Merrill

1

프리즈 봇

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)

루프에서 자신을 잡으십시오 자신의 A변수를 증가시킨 다음 플래그로 채워서 다음 희생자로 넘어갑니다.


3 행 : D + 1을 Add (D, 1)로 교체하십시오
Nathan Merrill

시작이 라인 0에 있다고 가정합니다. 이제 모든 사람이 라인 (2)이 :( 바보 에스컬레이션 / 재 제출 추세로 이어질 것입니다 그들의 시작을 넣어 인센티브한다
Sparr

1

위조자

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 + 1을 Add (D, 1)로 교체하십시오
Nathan Merrill

또한 명령을 행으로 전달할 수 없습니다. 당신은 OLine또는 전달해야 합니다Line
나단 메릴

@NathanMerrill 갈 준비가되었습니다! (적어도 나는 그렇게 생각한다)
MegaTom

이 봇은 실제로 내 코드에 문제를 일으켰지 만 그것은 내 잘못이 아니라 내 잘못이었습니다. 몇 가지 버그를 넣어주십시오 있습니다 Line주위에 2, 그리고 Add(D,1)대신D+1
나단 메릴

1

게으른 암 사자

원래 "Lioness"라는 이름으로 컨테스트에 처음으로 제출 한 것은 시뮬레이터에 도입 될 때 문자 그대로 아무것도하지 않음으로써 "lazy"라는 제목을 얻었습니다.

그녀의 무기력 (또는 아마도 내 이벤트 모델을 오해) 처음 세 줄의 조건 (플래그 덮어 아니라는 것을 보장하기위한 간단한 패리티 검사) 때때로 알수없는 평가에있어서 버그로 인해 사실상 true렘니 스케이트 루프에서 레오 잠금, . 여러 다른 조건 (특히 조건에 의존하는 BotAt()조건)도 true인접한 봇이 없을 때 평가 합니다. 마지막으로, Move그리고 Copy시뮬레이터를 단계별로 때 지시는 명확하게 무시됩니다. 내 조건부 논리 체인은 다소 서사적이므로 코드 시뮬레이터 에 버그가 많이 있습니다 . ;)

어쨌든, 나는 Lazy Lioness를 오류 진단 또는 시뮬레이터 디버깅에 대한 테스트 사례로 제출합니다. 이로 인해 Lats Lions가 등장하여 Bots에 대한 첫 번째 선의의 제출로 시뮬레이션하고 개선 할 수 있기를 바랍니다. v2 경쟁.

그것은 아무것도하지 않습니다

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)

나는 버그를 볼 수는 없지만, 다만 경우에 당신은 아마 사용해야 Modified의 일부 대신 조건을Equals
MegaTom

cliqueBot도 같은 문제가있는 것 같습니다. 컴파일러 버그라고 생각합니다.
MegaTom

@MegaTom : Modified조건은 무한 루프에 대한 초대입니다. 패리티 검사를 사용할 수 없으면 선을 완전히 제거합니다. 다른 유용한 정보를 찾아보십시오. ;)
COTO

컨트롤러에서 버그를 발견했다고 생각합니다. 나는 그에게 풀 요청을 보냈다. 그가 그것을 받아 들일 때까지, 당신은 당신이 좋아하면 내 포크를 시도하고 그것이 당신을 위해 작동하는지 알려주세요.
ccarton

1

보초

에 즉흥 연주 Gard. 처음 8 줄에 깃발로 근처 봇을 공격합니다. (즉, 가장 많이 사용되는 것)

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

3 번 줄에 괄호가 잘못 놓인 것 같습니다. 첫 번째 Not이 제대로 닫히지 않았습니다. 나는 그것이해야한다고 생각All(BotAt(D),Not(Equals(OLine(Mod(E,8)),Line(0))),Not(BotAt(Add(D,1,Mod(E,3))))):
ccarton

1

클리크 보그

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

CliqueBot과 Borg 기술을 결합하여 라인 오프셋에도 불구하고 자신의 사본을 인식하는 봇을 만들려고합니다. 또한 라인 0이 아닌 상대 봇에서 마지막으로 실행 된 코드 라인에서 복사 프로세스를 시작합니다. 이것이 작동하는지 확인하십시오. 테스트하지 않았으며 꽤 복잡합니다).


Plus를 Add로 바꾸고 Minus를 Sub로 바꾸십시오
Nathan Merrill

1

운전

마감일 전에 한 번의 마지막 시도.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.