공개 변수에 어떤 문제가 있습니까?


33

코드 봇

개인 및 보호 변수가 싫어. 나는 단지 무엇이든 모든 것에 접근하고 싶다!

당신이 나와 같다면,이 도전은 당신을위한 것입니다!

다른 봇과 조화롭게 작동 하는 봇을 작성 하면 다른 봇이 원하는 것을 수행 할 수 있습니다. 당신은 프로그래머이며, 일이 어떻게 진행되는지 알고 있습니다. 귀하의 임무는 가능한 한 많은 다른 봇을 귀하의 방식으로 변환하는 것입니다.

코드

봇을 작성하기위한 24 줄의 코드가 있습니다. 매 턴마다 모든 봇은 1 라인을 순차적으로 실행합니다.

각 봇은를 A통해 5 개의 변수 를 저장합니다 E. AB개인 사용하기위한 C다음의 라인이 실행하는 점포 D기억 전류의 방향은 한 E난수이다. 변수는 0에서 시작하지만을 제외한 D임의의 값에서 시작합니다. 모든 변수는 0-23 만 저장합니다. 크거나 작은 숫자는 24로 변조됩니다.

이 게시물에서 상대를 사용하여 인접한 봇으로 사용합니다.

각 줄에는 다음 5 가지 명령 중 하나가 포함되어야합니다.

  1. Flag아무것도하지 않습니다. 그것이 당신이이기는 방법을 제외하고
  2. Move봇을 Dth 방향으로 움직입니다. 봇이 이미 공간을 점유하면 아무런 움직임도 발생하지 않습니다
  3. Copy Var1 Var2 Var1의 내용을 Var2로 복사
  4. If Condition Line1 Line2 Condition이 true이면 Line1을 실행하고 그렇지 않으면 Line2를 실행합니다
  5. Block Var1 변수에 대한 다음 쓰기를 차단합니다

변수는 다음과 같이 사용할 수 있습니다.

#Var변수를 줄 번호로 사용합니다. A17 인 경우 Copy #8 #A8 행의 내용을 17 행으로 복사합니다 *Var. 상대 변수를 사용합니다. Copy 5 *C상대 C변수를 설정하여 5 Var+Var두 변수를 추가합니다. Copy D+1 D봇을 오른쪽으로 회전시킵니다

D방향으로 사용 하면 [North, East, South, West][D%4]사용됩니다

이 수정자는 체인으로 묶을 수 있습니다. Copy *#*C #9상대가 실행할 다음 행을 9 행의 고유 코드에 복사합니다 . **D상대의 상대 D변수를 나타냅니다 .

조건은 다음과 같이 평가됩니다.

  1. 만약 Var:
    1. Var이 Athrough C인 경우 Var이 0이 아니면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
    2. Var가 D인 경우, Dth 방향으로 봇이 있으면 true를 반환 하고 그렇지 않으면 false를 반환합니다
    3. Var가 E이면 E가 홀수이면 true를 반환하고, 그렇지 않으면 false를 반환합니다
    4. Var이 줄이면 Flag 줄이면 true를 반환합니다.
  2. 만약 Var1=Var2:
    1. 둘 다 모두 A-E같고 같은 수 이면 true를 반환
    2. 둘 다 선이고 선 종류가 같은 경우 true를 리턴합니다.
  3. 만약 Var1==Var2:
    1. 둘 다 모두 A-E같고 같은 수 이면 true를 반환
    2. 둘 다 선이고 동일하면 true를 리턴합니다 (다른 봇의 플래그는 동일하지 않음)

각 유형의 봇 50 개는 다음과 같은 패턴으로 환상 세계에 배치됩니다.

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

5,000 번의 각 경기 후에, 각 봇의 깃발이 계산됩니다. 봇에 다른 유형의 깃발보다 깃발이 더 있으면 포인트를 얻습니다. N봇 사이의 동점 인 경우 포인트가 제공되지 않습니다.

10 번의 게임이있을 것이며, 마지막에 점수가 쌓일 것입니다.

사이드 노트

줄 끝 주석이 허용되며로 표시됩니다. //

행에 추가하는 것과 같이 이해가되지 않는 작업을 시도하면 아무 효과가 없습니다.

존재하지 않는 봇에서 무언가를 시도하면 아무 것도하지 않습니다

If행이 실행되지 않고 의지 에 대한 무한 재귀

If 의 값을 변경하지 않습니다 C

Block누군가가 쓰려고 시도 할 때까지 A 는 만료되지 않습니다

여러 변수와 라인을 한 번에 차단할 수 있습니다

Block변수를 여러 번 사용하면 두 번째 블록 명령문이 첫 번째 코드와 다른 코드 행에있는 한 여러 번 블록됩니다

인수 사이 (및 명령 뒤에)에만 공백이 허용됩니다.

봇이 24 라인보다 짧은 경우 플래그는 나머지 라인이됩니다.

샘플 프로그램

Copy 2 C        //Skip to the If line
Flag            //Where I'm storing my flag
Move            //Move in the D'th direction
If D #5 #2      //If there's a bot, copy code, otherwise, move!
Copy #1 *#E     //Copy my flag onto a random spot in my bot's code
Copy 2 C        //Skip back to the If line

이 프로그램은 내 Python 컨트롤러 에서 실행됩니다 .

자바 컨트롤러는 여기 그것은이 빠른 훨씬 더 파이썬보다 및 보인다.

스코어 보드 :

  1. 6837 달러
  2. 3355 록히드
  3. 1695 마인드 컨트롤
  4. 967 비잔틴
  5. 959 공격
  6. 743 카미 필리온
  7. 367 인플루엔자
  8. 251
  9. 226 마구스
  10. 137 HideBlockAttack
  11. 129 로우 봇
  12. 123 FastMoveCloneDodge
  13. 112 FastForwardClone
  14. 96 퀵 프리즈
  15. 71 RepairAndProtect
  16. 96 슈퍼 프리즈
  17. 93 로빙 바이러스
  18. 80 포워드 클론
  19. 77 동결 태그
  20. 68 팔 림프 스테
  21. 62 블록 동결 공격
  22. 51 RushAttackDodge
  23. 46 차단제
  24. 40 터렛 메이커
  25. 37 모방
  26. 37 카미카제
  27. 35 플래그 인젝터
  28. 33 랜덤 복사기
  29. 31 교활한
  30. 29 해피 아슬 람
  31. 25 나노 바이러스
  32. 21 무효화 기
  33. 19 노비 노리스
  34. 17 지루한 카 피봇
  35. 16 개의 이동
  36. 14 깃봇
  37. 13 중화제
  38. 12
  39. 9 DNAbot
  40. 9 기생충
  41. 8 메타 교활한
  42. 8 브랜드 변경
  43. 8 AdaptiveBot
  44. 8 재현 봇
  45. 8 쿵푸 봇
  46. 5 빠른 냉동고
  47. 4 공격자

1
Java를 테스트 할 수있게되면 이것에 관한 모든 것이 될 것이다.
Wasmoo

2
나는 당신이 핵심 전쟁을 한 적이 없다고 가정합니다. en.wikipedia.org/wiki/Core_War
matt_black

나는 그것을 연주하지 않았지만이 도전을 쓰는 동안 그것에 대해 조금 읽었습니다.
Nathan Merrill

파이썬 컨트롤러 용 패치가 있고 github에서 다시 푸시하려고 시도했지만 권한이 없습니다 / 실제로 git을 알지 못합니다. 패치는 모든 "16"을 "num_lines"로 대체하여 마지막 8 개의 명령에 대한 쓰기 / 점프 액세스를 허용합니다. 또한 선언 _flags ()의 타이 조건에서 "max_flag_count = 0"을 제거합니다.
adipy

1
다음 배틀 라운드가 언제 시작 될지에 대한 ETA는? 서두르지 마십시오. 그냥 궁금 해서요 감사.
COTO

답변:


13

플래그 봇

Flag

다른 봇이 나에게 코드를 줄만큼 좋은 일을 할 때 왜 귀찮게합니까?


8

태그 고정

Move
If D #3 #2
Copy 23 C
Copy 3 C
Copy #23 *#*C
Copy #21 *#*C+1
Copy #22 *#*C+2
Copy #21 *#*C+3
Copy #22 *#*C+4
Copy #21 *#*C+5
Copy #22 *#*C+6
Copy #21 *#*C+7
Copy #22 *#*C+8
Copy #21 *#*C+9
Copy #22 *#*C+10
Copy #21 *#*C+11
Copy #22 *#*C+12
Copy #21 *#*C+13
Copy #22 *#*C+14
Copy D+1 D
Copy 0 C
Flag
Flag
Copy C+23 C

루프에서 상대를 함정에 빠뜨리고 깃발로 채우고 다음 상대로 넘어갑니다.


Copy C+23 C이것은 가장 악의적 인 코드 xD 여야합니다.
Cruncher

내가 관심. 이것은 불가능할 수 있습니다. 플래그로 채우는 대신 플래그로 채워지는 루프를 넣을 수 있습니까? 아니면 당신의 깃발로 간주되지 않습니까?
Cruncher

깔끔하고 실행 가능한 아이디어이지만 더 복잡합니다. 당신은 그것을 사용하는 봇을 작성해야합니다 :)
Sparr

2
마지막 질문에 대한 답을 알고 있습니까? Or would that not count as your flags?. 그들이 당신의 자신의 깃발로 계산되지 않는다면, 그것은 확실히 좋은 해결책이 아닙니다
Cruncher

@Cruncher 당신은 그들에게 당신의 깃발 중 하나를주고 그것을 복사 할 수 있습니다.
Sparr

8

기생물

왜 다른 봇을 죽입니까? 이 봇은 상대의 코드를 살펴보고 플래그 만 바꿉니다.

Copy 1 A
Copy E D
Block #A
If *#A #C+3 #C
Copy A+A+A+A+A A
Copy C+19 C
Copy #C+4 *#A
Flag
Copy 1 A
Copy E D
Block #A
If *#A #C+3 #C
Copy A+A+A+A+A A
Copy C+19 C
Copy #C+4 *#A
Flag
Copy 1 A
Copy E D
Block #A
If *#A #C+3 #C
Copy A+A+A+A+A A
Copy C+19 C
Copy #C+4 *#A
Flag

8

$ 복사

이 봇은 COTO의 록히드와 같은 기술을 많이 사용하므로 부끄럽게 빌리고 향상시킬 것입니다.

이것은 C블록을 손상 시키는 취약점을 악용 하고 심지어 중화기를 역전시킵니다. 이 때문에 절대적으로 작성됩니다. C교대가 회복 되면 이것이 깨질 수 있다고 생각 하지만 교대가 일정하다면 교대를 위해 다시 쓸 수 있습니다.

어떤 이유로 든 끝에 루프가 없기 때문에이 봇은 매우 좋았습니다.

Block #C+A 
If D #7 #13        //If [enemy] Copy 0 ELSE block
If D #8 #0         //If [enemy] Freeze 0 ELSE block
If D #9 #6         //If [enemy] FreezeCheck ELSE Inc
Move
Copy 0 C
Copy A+5 A          //Inc
Copy 23 *C          //Copy 0
Copy #10 *#*C+23    //FreezeAttack
If *#*C==#10 #11 #5 //FreezeCheck: If [frozen] GOTO Copy Attack ELSE GOTO [1]
Copy C+23 C         //FREEZE
Copy 13 C           //GOTO Copy Attack
Copy 15 C           //Loop Copy Attack
Block #C+A
Copy D+3 *D             //Copy Attack: Spin Enemy
Copy 0 *B               //Set enemy counter (a la COTO)
Copy #*B+0 *#*C+*B+1    //Copy my lines
Copy #*B+1 *#*C+*B+2    //Copy my lines
Copy #*B+2 *#*C+*B+3    //Copy my lines
Copy *B+3 *B            //Inc counter
If *B==0 #19 #12        //Loop check
Copy D+1 D              //Turn myself

1
나는 당신의 개선 된 디자인에 절하고 봇 v. 3 대회에서 다시 당신을 직면 할 것입니다. ;)
COTO

솔직히 이것이 모든 사람의 그룹 노력이라고 생각합니다. 여러 봇이 모델링하지 않은 경우에는 존재하지 않습니다. 흥미롭게도이 봇을 추가하면 블로킹에 의존 한 봇이 고장 났고 깃발 교체에 의존 한 봇이 상승함에 따라 스코어 보드가 완전히 재구성되었습니다.
Wasmoo

누군가 어딘가에 블록의 실제 행동과이 봇과 록히드가 어떻게 그것을 이용 하는지를 요약 할 수 있습니까?
Sparr

HappyAsAClam에 설명 된대로 각 라인은 블록을 발생시킬 수 있습니다 . 가장 중요한 것은 동일한 값으로 호출 된 블록에 대해서는 스택 되지 않습니다C . 따라서, If명령문 에서 호출 될 때 블록이 스택 될 수 있으며 , 여기에서 사용되는 익스플로잇입니다. $ Copy는 Copy같은 줄에서 성공할 때까지 같은 줄을 반복 해서 실행하여 블록 (예 : 조개)을 분리 하므로 Lockheed보다 유리합니다.
Wasmoo

7

록히드

이 특정 봇 전쟁에 대한 나의 세 번째 (아마도 마지막) 제출 : Lockheed Reactor 또는 "Lockheed".

Block #C+A
If D #C+7 #C+1
Block #C+A
Move
Copy A+5 A
If A==0 #C+12 #C+21
Copy C+17 C
Copy D+3 *D
Copy C+9 C
Copy C+21 C
Copy C+23 C
Copy #C+23 *#*C+2
Copy #C+22 *#*C+1
Copy 0 *A
Copy #*A+C+9 *#*C+*A+1
Copy *A+1 *A
If *A==0 #C+15 #C+17
Copy D+1 D
Copy C+5 C

"Wasmoo에게 특별한 감사의 말을 전한다." '두 번째 블록 명령문이 첫 번째 코드와 다른 코드 라인에있는 한 변수를 여러 번 블록하면 여러 번 블록됩니다.' 단순히 사실이 아니다 "착취. 나는 그것을 광범위하게 사용합니다.

또한 경쟁을 관리하고 시뮬레이터를 게시 한 Nathan Merill에게도 감사드립니다. 시뮬레이터는 튜닝 봇에서 매우 중요합니다. 내 눈으로 시뮬레이션하지 않았다면 그것을 믿지 못했지만 가장 개념적으로 작은 봇 기능을 추가하거나 제거하면 큰 성공과 실패의 차이를 의미 할 수 있습니다. 그게 좋은지 아닌지 찢어졌습니다.


변수를 여러 번 차단하면 실패합니다. 그러나 다음과 같은 경우에만 차단에 실패합니다. 동일한 라인을 실행 중이고 ( If해당 라인을 가리키는 것이 실패하지 않음) 동일한 값을 차단하고 있습니다 (단일 라인은 증분 변수로 라인 1-24를 차단할 수 있음). 블록은 이미 (누군가가 그 변수를 수정하려고) 공개되지 않은
나단 메릴를

차단 명령이 차단 설명이 아니라 IP에 입력되었으므로 OP의 진술에 이의를 제기합니다. 따라서 단일 블록 명령문은 모든 명령에 최대 24 개의 개별 블록을 구성 할 수 있습니다. "두 번째 블록 설명이 첫 번째 코드와 다른 코드 줄에있는 한"OP의 절은 "페어 블록 ( C, <block target>)에 대한 블록 이 아직 유효하지 않은 한"으로 수정되어야합니다 . 즉, 블록 명령문이있는 라인은 블록이 직접 실행되는 경우 C= 블록 명령 주소를 제외하고는 스태킹과 관련이 없습니다 .
COTO

1
이 봇은 훌륭합니다! 최고의 개념을 모두 하나로 결합합니다. 적을 찾을 때까지 자신을 보호 한 다음 적을 두 번 얼린 후 반대 방향으로 자유롭게 설정하기 전에 대상에 자신의 사본을 업로드합니다. 시뮬레이션에서 사본 중 하나가 손상된 원본을 수리하는 것을 보았습니다. 와우! 잘 했어, COTO!
Wasmoo

6

다른 공격

비잔틴과 같은 방어 로봇이 잘 작동하는 것을 보았을 때 방어 로봇도 만들기로 결정했습니다.

이것은 적의 존재 여부에 따라 두 가지 패턴이 있습니다.

  • 적이 없으면 3 번 선을 막고 움직입니다.
  • 적이있는 경우, 그 적 해당 플래그 (약한 복제기) 복사 발생할 그 플래그를 복사 코드를 복사 번갈아 그것의 복사본 플래그
  • 루프가 끝나면 임의의 방향으로 바뀌고 계속됩니다.
  • 코드의 대부분 측면이 중복

더 많은 테스트는 몇 가지 중요한 개념을 보여주었습니다.

  • "무작위 회전"이 "오른쪽 회전"(대체 +2700)보다 극적으로 우수
  • 블록 증분이 A+7다른 증분보다 더 효과적인 것으로 표시됩니다 (다음 최고에 +200)
  • "직접 공격"이 "약한 복제기"보다 우수함 (대체 +900)
  • "3-1-2-1"방어가 다른 조합보다 우수 (다음 최고 +200)
  • 중복 된 공격, 차단 및 루프 코드로 점수가 향상됩니다 (중복되지 않은 +300)
  • 중복 된 블록 증가는 점수를 향상시키지 않습니다 (중복 된 +400)

Java UI를 통해 그래픽으로 시뮬레이션을 관찰하면 많은 도움이되었습니다. 고맙습니다! 다음은 새롭고 개선 된 코드입니다. 더 이상 할 수있을 것 같지 않습니다.

Block #C+A          //Dynamic block for If statements
If D #20 #0
If D #19 #8
If D #20 #23
If D #19 #0
If D #20 #8
If D #19 #23
Copy A+7 A          //Increment dynamic block
Block #C+A          //Dynamic block for If statements
If D #19 #8
If D #20 #0
If D #19 #8
If D #20 #23
If D #19 #8
If D #20 #0
If D #19 #23
Copy E D            //Turn Random
Copy 23 C           //Loop to beginning
Copy 23 C           //Loop to beginning
Copy #22 *#*C+1     //Copy my flag to the enemy's next
Copy #21 *#*C+1     //Copy my flag to the enemy's next
Flag
Flag
Move

이 봇은 정말 대단했습니다. GUI에 오신 것을 환영합니다.
Nathan Merrill

두 번째 루프를 포함하도록 업데이트하여 성능이 크게 향상되었습니다. 또한 Java 차단은 차단 한 것을 기반으로한다는 것을 알았 C습니다. 이 봇에는에 기반한 회전 블록이 있기 때문에 C각 명령에 여러 블록이 발생합니다. 이 로봇은 방어력이 뛰어납니다.
Wasmoo

내 이해는 원래 명령 당 하나의 블록 만 설정할 수 있으므로 위의 코드는 모든 명령에서 단일 블록 만 설정할 수 있다는 것입니다 (모든 명령에서 단일 블록을 설정하려면 24 * 17 턴이 걸립니다). 내 이해가 틀리면 "두 번째 블록 문장이 첫 번째 코드와 다른 코드 줄에있는 한 변수를 여러 번 차단하면 여러 번 차단됩니다." Wasmoo의 코드가 명령에 대해 여러 블록을 설정할 수 있으면이 문은 (솔직히) 거짓이기 때문에 OP의 수정이 필요합니다.
COTO

@COTO : Java 시뮬레이터는 호출 IfC변수를 사용 하여 한 줄에 한 블록 씩 목록에 추가 합니다. 따라서 1 블록과 9 블록이 Block 문을 실행하면 봇은 각 라인에 대해 최대 10 블록을 얻을 수 있습니다 (최소 24 * 10 * 10 회전) OP가 시뮬레이션을 올바르게 전달하지 못했을 수 있습니다.
Wasmoo

핵심 개념을 유지하면서 반복 개선을 반영하기 위해 코드를 다시 업데이트했습니다. 나는 약한 복제에서 직접 공격으로, 비 중복에서 이중으로의 전환과 같은 각 반복으로 포럼을 넘치게하는 것이 낫다고 생각했습니다. 내 원본을 다시 게시하고 싶다면 그렇게 할 수 있습니다.
Wasmoo

5

행 봇

Move
If D #7 #0
If D #7 #0
If D #7 #0
If D #7 #0
If D #7 #0
Copy 0 C
If D=*D #9 #8     //If they point in a different direction
Copy *D D           //fix that
If #A==*#A #10 #11  //Did we copy line A already?
Copy A+1 A          //If so, A++
Copy #A *#A         //else, copy it!

로봇을 찾을 때까지 움직입니다.
로봇을 같은 방향으로 설정합니다.
그런 다음 코드를 로봇에 복사합니다.
"Row Bot"로봇 행을 만들어야합니다. :)


두 가지 (쉽게 고칠 수있는) 문제가 있습니다. 먼저, If명세서는 대문자 여야합니다. 둘째, =와 같이 양쪽에 공백이 없어야합니다 D=*D.
PhiNotPi

이것은 훌륭한 아이디어입니다.
Sparr

깃발이 없으면 이길 수 없습니다.
Paŭlo Ebermann

3
@ PaŭloEbermann 봇에는 최대 24 줄의 플래그가 채워 지므로이 봇에는 끝에 12 개의 암시 적 플래그가 있습니다.
Sparr

5

슈퍼 프리즈

Move                    // start moving!
Block #E
If D #12 #0             // 8 turns of attack or move
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
If D #12 #0
Copy D+1 D              // change direction
Copy 0 C                // start over
If *#*C==#23 #13 #14    // if opponent is frozen, give them a flag, otherwise freeze them
Copy #C+13 *#E          // give a flag to opponent
Copy #23 *#*C           // copy freeze line to opponent
Flag                    // 8 flags, one per If above
Flag
Flag
Flag
Flag
Flag
Flag
Flag                    
Copy C+23 C             // this line freezes any bot that executes it

이 봇은 봇이 작동 할 때까지 봇을 동결하려고 시도한 다음 임의의 라인에 많은 플래그를 기록하고, 8 턴 후에 회전하고 다른 상대방에게 넘어갑니다.


5

복잡한

메타 블록 (예 : 중요 블록 명령의 블록)을 포함하여 플래그와 가장 민감한 명령에 여러 블록을 설치하는 매우 방어적인 봇.

또한 예측할 수없는 방식으로 지속적으로 이동하며 최선의 노력으로 상대방의 여러 위치에 깃발을 심습니다.

Block #A
Block #A+1
Block #A+2
Copy E D
Move
Block #A+3
Block #A+4
Move
Copy #22 *#*C+1
Copy E D
Move
Block #A+5
Block #A+6
Block #A+7
Move
Copy #22 *#23
Block #A+8
Block #A+9
Block #A+10
Copy #22 *#2
Copy A+14 A
Move
Flag
Copy #22 *#*C+12

시뮬레이션 할 수 없기 때문에 어떻게 수행되는지 확실하지 않습니다. 그러나 우리는 그것을 쏜다. ;)


기권

나는 조건부 논리가 비용이 들지 않는다는 PhiNotPi의 친절한 정보를 받기 전에 이것을 썼습니다. 그러나 나는 너무 많은 봇을 가질 수 없기 때문에 그대로두기로 결정했습니다.


이 봇이 승리합니다!
justhalf

4

카밀리 온

"나는 방금 배틀 로얄에서 봇에 들어갔다"고 말했다. "그것은 느린 봇에 의한 공격을 막기 위해 몇 차례마다 움직입니다."

"느린 봇은 무엇을 의미합니까?" PhiNotPi가 묻습니다.

"조건부 논리의 긴 사슬을 평가하는 데 갇힌 봇"이라고 대답했다.

PhiNotPi는 "다른 'if'문을 포함하여 다른 문으로 리디렉션되는 'If'문은 모두 같은 차례에 실행됩니다"라고 말합니다.

"조립 된 대량의 어셈블리 코드 규칙!" 나는 울었다. "누가 그 아이디어를 생각해 냈습니까?"

... 따라서 Cadmyllion이 어떻게 생겼는지에 대한 이야기입니다.

Cadmyllion : 단일 명령으로 무한히 많은 조건식을 평가할 수있는 초현실적 인 기능을 행복하게 활용하는 봇.

암호

If D #15 #19
Move
If D #16 #20
Copy D+3 D
Block #A
If D #15 #20
Copy A+1 A
If D #16 #1
Move
If D #15 #19
If D #16 #4
Copy E D
Block #A+12
Copy C+10 C
Flag
If *#0==#14 #17 #21
If *#0==#14 #18 #21
If *#*C+1==#14 #18 #22
Copy *C+11 *C
Block #A+6
Block #A+18
Copy #14 *#0
Copy #23 *#*C+1
Flag

4

메타 교활한

이 봇은 얼어 붙은 다음 적들을 덜 효율적인 버전의 Sparr 's Insidious 로 변환 합니다. 이것은 내가 작성한 가장 복잡한 봇 일 것이므로 끔찍한 일을 기대합니다. 블록 할 공간이없고 코드에 하나의 플래그 만 장착되었습니다. 봇을 교활한 클론으로 전환하는 데 너무 오래 걸립니다.

가장 큰 도전은 교활한 클론의 코드를 봇에서의 위치에 관계없이 작동하는 방식으로 작성하는 것이 었습니다. 고정 위치에 정확히 두 번째에서 마지막 코드를 붙여 넣으면 고정이 제거됩니다.

If D #2 #1
Copy 23 C
Copy #8 *#*C // freeze the opponent
Copy 9 A
Copy #A *#A+*C // copy the next line at the appropriate  line
Copy A+1 A
If A==0 #7 #23
Copy 23 C
Copy C+23 C
If D #C+2 #C+23 // the code for the Insidious clone starts here
Copy C+21 C
Copy C+2 C
If D #C+6 #C+22
If D #C+5 #C+22
If D #C+4 #C+20
If D #C+3 #C+19
If D #C+2 #C+18
Copy E D
Copy #C+7 *#*C
Flag
Copy C+3 A
Copy #C+22 #A
Copy A+1 A
Copy C+21 C // And ends here

그것은 영리한 아이디어입니다. 그러나 이동 명령이 표시되지 않습니다. 그것은 당신의 봇이나 스팸 봇이 움직이지 않는다는 것을 의미합니까?
Wasmoo

공간이 제한되어 있기 때문에 교활한 클론은 봇의 원래 코드에 무엇이 있는지에 따라 움직일 수 있습니다. 그것은 실제로 다른 것보다 더 정신적 인 운동이었습니다.
overactor

3

수리 및 보호

이 봇은 새로 수리 된 라인을 보호하면서 자체 코드를 복구합니다.

If #A==#A+16 #C+1 #C
Copy #A #A+8
Block #A+8
Copy A+1 A
Copy E D
Move
Copy #C+1 *#*C
Flag
If #A==#A+16 #C+1 #C
Copy #A #A+8
Block #A+8
Copy A+1 A
Copy E D
Move
Copy #C+1 *#*C
Flag
If #A==#A+16 #C+1 #C
Copy #A #A+8
Block #A+8
Copy A+1 A
Copy E D
Move
Copy #C+1 *#*C
Flag

설명:

의 초기 값은 A이며 0행의 번호는 0-23입니다. 은 if If문이 실행되고 거짓이고, 그것은 다시 같은 줄을 실행하려고 않습니다. 컨트롤러는 봇이 동일한 라인을 두 번 실행하는 것을 허용하지 않으므로 회전이 종료되고 C으로 증가합니다 1.

다음 줄 Copy #A #A+8은 실제로 If명령문 의 값에 관계없이 수행 됩니다. 차이점은 true 인 경우 두 번, false 인 경우 한 번 실행된다는 것입니다. 회선 #A+8이 차단 된 경우 (결국 발생) 실제로 복사하여 두 번 수행하면 한 번 수행하면 차단이 해제됩니다. 그런 다음 새로 복사 한 줄이 유지되도록 차단됩니다.


나는 너희들 모두를 이해하려고 노력하고 있지만 갇혀있다. 초기 값은 A얼마입니까? 그렇지 0않습니까? 그렇다면 첫 번째 줄은 0 줄과 16 줄을 비교하지만 OP 예제 봇에서 알 수 있듯이 첫 번째 줄은 1 줄입니다. 추가로 여전히 첫 번째 줄 #C에이 줄을 참조하므로 If명령문이 false를 반환하면 끝없는 루프에 빠졌습니까?
plannapus

@plannapus 설명을 추가했습니다.
PhiNotPi

3

중화제

이 봇은 피해자가 전체 프로그램을 다시 작성하여 0 점의 가치를 갖습니다. 바이러스가 설치되면 바이러스가 계속 진행됩니다. 이것은 승리에 대한 불타는 지구 접근 방식입니다.

If D #C+2 #C+3          // A: If [enemy exists] B else C
Copy C+22 C             // GOTO A
If *#*C==#7 #C+4 #C+5   // B: If [enemy was neutralized] D else E
Move                    // C: Move
Copy E D                // D: Turn Randomly
Copy #7 *#*C            // E: Neutralize enemy
Copy C+1 C              // Skip the next line
Copy #C #C+1            // Neutralizing Code [Copy this line to next line]

비교 *#*C==#7는 상대의 변속을 올바르게 조정하지 않는 것 같지만 봇은 결국 움직입니다.


Copy C+1 C한 줄을 건너 뛰는 데 필요한 전부입니다.
Nathan Merrill

2
'다음 줄 건너 뛰기'는 봇이 계속하기 전에 플래그 명령을 실행하는 데 16 턴을 소비한다는 것을 의미합니다. Copy 23 C대신 첫 번째 줄로 돌아 가려고 할 수 있습니다 .
Sparr

'다음 줄 건너 뛰기'는 'GOTO A'를 덮어 쓴 경우에만 발생합니다. 'A'반복, 코드 복제 및 'GOTO A'차단과 같이이 봇을 더 공격적이고 방어 적으로 만들 수있는 다른 방법이 있습니다. 그러나이 봇이 전혀 맞으면 어쨌든 거의 죽었습니다.
Wasmoo

3

교활한

Move
If D #4 #0
If D #4 #0
Copy 0 C
Copy 4 C
If D #12 #11
If D #12 #11
If D #12 #11
If D #12 #11
If D #12 #11
Copy D+1 D
If D #4 #3
Copy #C+8 *#*C
Flag
Copy C A
Copy #C+22 #A
Copy A+23 A
Copy C+21 C

@Cruncher에서 영감을 얻은이 봇은 다른 봇을 작은 코드 블록으로 감염시켜 다른 봇을이 봇의 플래그로 채 웁니다. 그 봇들은 더 공격하기 위해 오리에 앉아 있지만 다른 사람에 의해 다시 감염되면 대부분 내 깃발로 가득합니다.

편집 : 골프 지원을위한 @PhiNotPi, 효율성 조언을위한 @overactor 덕분에


2k를 치면 축하합니다!
bjb568

3

조개로 행복

이것은 차단 운동입니다. 돌아올 때까지 대단한 성능을 발휘했습니다 $Copy.

대합에는 22 개의 블록 명령이 있습니다. A루프마다 전환 되므로 루프를 통해 매번 다른 라인을 참조합니다. 이를 통해 각 명령은 다른 라인마다 블록을 쌓을 수 있으며 라인 당 22 블록을 최대로 사용할 수 있습니다. 따라서, 완전히 장갑을 끼고있는 조개를 깨기 위해서는 22 번 줄을 써야합니다.

예를 들어, #10루프를 통해 매번 다음 줄로 보호됩니다.

  • 루프 0, A = 0 #10라인 7로 보호 ( 7+0+3= 10)
  • 루프 1, A = 7, #10라인 0으로 보호 ( 0+7+3= 10)
  • 루프 2, A = 14, #1017 행으로 보호 ( 17+14+3= 34 = 10)
  • 루프 3, #10라인 10으로 보호 된 A = 21 ( 10+21+3= 34 = 10)

따라서 루프 3의 10 #10번 라인 이 4 번 차단 된 후 4 번의 쓰기 작업으로 #10블록을 깨고 실제로 5 번의 줄을 덮어 씁니다.

블록은 해당 C값 으로 키가 지정되며 보호 된 라인이 이미 동일한 값으로 차단 된 경우 스택 되지 않습니다C . 따라서 각 라인에 22 개의 블록이 설정된 후에는 더 이상 블록이 쌓이지 않습니다.

Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Block #C+A+3
Copy A+7 A
Flag

3

MindControl

너무 늦지 않은 것 같아요?

Block #C+D
If D #2 #0        // Scan for enemy
If *#E==#E #0 #5  // Attack if necessary
Copy D+5 D        // Turn
Copy 22+1 C       // Repeat
Copy 4+1 C        // ATTACK:
Copy #22+1 *#*C   //   Freeze
Copy #17 *#17     //   Upload the DOWNLOADER
Copy #18 *#18     //
Copy #21 *#19     //
Copy D+2 *D       //   FACE ME!!
Copy 17 *C        //   Start download
If E #0 #13
If E #0 #13
Copy 22+1 C
Flag
Flag
Copy *#B+20 #B+20         // DOWNLOADER
If *#B+20==#B+20 *#20 #19 //
Copy 22+1 C               //
Copy 1+B B                //
Copy 16 C                 //
Flag
Copy 23+C C        // FREEZE

MindControl은 내 프로그램 전체를 상대방에게 복사하는 데 상당한 시간이 걸릴 것이라는 생각에서 비롯되었습니다.이 동안 내 봇은 다른 방향의 공격에 취약합니다. 그렇다면 적을 스캔하는 동안 상대방이 내 프로그램을 복사하게하지 않겠습니까?

일단 적을 찾으면, MindControl은 즉시 탈출하여 탈출을 막습니다. 그런 다음 다운로더를 상대에게 업로드하고 피해자가 MindControl의 프로그램 자체를 다운로드하도록합니다. 다운로더는 소수의 봇이 B24 개 라인을 모두 다운로드 할 때까지 사용 하고 반복 한다는 사실을 이용합니다 . 다운로더가에서을 ( #19를) 다시 쓰면 피해자가 모든 행 Copy 16 C을 다운로드했음을 나타내며 Copy 23 C재부팅을 계속합니다.

내 봇의 첫 번째 버전에는 블록이 포함되어 있지 않습니다. 그리고 거의 모든 변화가 무너질 정도로 취약했습니다. 그래서 Wasmoo의 $ Copy (COTO의 Lockheed를 기반으로 함)를 기반으로 블록을 추가하기로 결정했습니다. 내가 찾은 단점은 원본이 사본의 실수를 수정하는 것이 어렵다는 것입니다. 그러나 이것은 크립 킹과는 거리가 멀고 점수가 크게 증가하여 블록을 유지했습니다.

업데이트

블록을 우회하는 데 성공할 때까지 다운로더를 계속 다운로드하도록 개선했습니다. 다운로더를 업로드하는 데 한 번 더 회전해야하지만이 변경 후 내 점수가 두 배가되었습니다! 숫자로 논쟁 할 수 없습니다.


다른 업데이트. 알다시피, MindControl은 자신과 대상 사이의 임의의 선을 비교하여 대상을 공격할지 여부를 결정합니다. 일치하면 MindControl은 대상이 이미 감염된 것으로 가정하고 그대로 둡니다. (측면 참고 : 나는 비교를 위해 정적 라인을 사용했지만 많은 오탐과 부정을 제공합니다) 많은 오탐을 제공합니다. 그래서 나는 ==약간의 사소한 변경 을 이용하기로 결정 C+23했다 23+C. 이 프로그램은 기능적으로 동일하지만의 눈에는 다릅니다 ==. MindControl에는 다른 봇의 라인과 동일한 라인이 없으므로, 터치되지 않은 봇에 100 % 충돌합니다. 다시, 점수가 크게 증가했습니다.


다운로더를 다시 개선했습니다. 이제 더 짧은 루프에서 실행됩니다. (내 점수와 큰 상관 관계가있는 것 같습니다)


다운로더가 다시 향상되었습니다. 원본 봇의 코드를 사용하여 더 빠르게 업로드합니다. 또한 점수를 향상시키는 것으로 보이는 2 개의 임의 블록을 추가했습니다.


너무 늦었 결코!
Nathan Merrill

BrainWash로 이름을 바꾸는 것을 고려 중입니다 ...
TwiNight

또는 벙커 버스터HappyAsAClam 벙커를 통해 다운로더 버스트를
TwiNight

다운로더를 먼저 업로드한다는 아이디어를 시도했지만 생각만큼 작게 얻을 수 없었습니다. 잘 했어! 나는 또한 로빙 블록 델타로 D를 사용하는 것을 좋아합니다. 명령을 저장하고 설계 속도를 높입니다. 'Move'명령이없는 봇이 잘 작동한다는 사실에 놀랐습니다. 시뮬레이션 결과에 따르면 봇이 덩어리지는 경향이 있지만 이것이 승리 전략이 될 줄은 몰랐습니다. 그리고 나는 조개를 깨는 것에 대해 독창적으로 만족스러운 것이 있다는 것에 동의합니다.
Wasmoo

@Wasmoo 분명히 다운로더 디자인은 봇이 정지 상태를 유지해야하며 봇을 덩어리지게합니다. 나는 그것을 키우기 위해 다른 봇과 손을 뻗어 동화시키는 나무의 뿌리라고 생각합니다. 그러나 민첩성이 $ Copy와 Lockheed가 나를이기는 이유라고 생각합니다.
TwiNight

2

공격자

Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Copy #E *#*C
Flag

2

Movebot

Move
Copy 23 C
Flag

Flagbot과 마찬가지로 코드의 선물을 수락하면서 모든 플래그와 함께 이동하십시오.


2

봇 재생

이 봇은 상대방을 정지시키고 다른 봇을 다시 시작하기 전에 코드 전체를 해당 봇에 복사하려고합니다. 상대방이 블로킹을 사용하는 경우 (대부분) 작동하지만, 이미보다 느리게 만듭니다.

If D #23 #22
Copy 23 C
Copy #18 *#*C
Copy #18 *#*C+1
Copy #18 *#*C
Copy #18 *#0
Copy #18 *#0
Copy 0 *C
Copy 0 *C
Copy 1 A
Copy #A *#*A
If D #12 #14
Copy A+1 A
Copy 9 C
Copy 23 C
Flag
Flag
Flag
Copy C+23 C
Copy D+1 D
Flag
If *#*C==#*C #19 #13
Move
If *#*C+1==#*C+1 #21 #13

조건에 공백이 없습니다
Nathan Merrill

@NathanMerrill gotcha
오버 액터

2

마구스

Magus는자가 전파 바이러스에 대한 간단한 시도입니다. 다른 봇의 프로그램에 자신을 복사하려고 시도합니다. (음수를 제거하고 조건을 수정하며 선을 자르도록 편집되었습니다.)

Block #A
Copy #A *#A
Copy A+1 A
If A #0 #4
Copy 0 *C
Flag
Move
Copy 0 C

음수 값은 허용되지 않습니다. B에 23을 사용하십시오
Nathan Merrill

25가 아닌 23을 사용하십시오.
Nathan Merrill

내가 오해하지 않는 한, 그것은 라인 23 또는 24를 막거나 복사하지 않을 것입니다 (참고 : 첫 번째 개정판에서 약간 변경되었으며, A는 B가 아닌 1 씩 증가합니다)
Isaac

+0 = 24 +1 = 25, -1 = 23. -1이 되려면 23이어야합니다.
Nathan Merrill

0과 비교할 수 있다고 생각했기 때문에 이전과 같았습니다 ( '='부분을 잃어 버렸고, 스키밍을 비난했습니다). 이제 A가 1에서 시작하여 25에서 끝나도록 변경되었습니다 for (int i = 1; i < 25; i++). .
이삭

1

DNAbot

Flag
Copy 8 D
Copy 16 B
If #D==#B #C+2 #C+3
Block #A
Copy #D #A
If D #7 #15
Copy #23 *#*C
Copy A+1 A
Copy B+1 B
Copy D+1 D
If #D==#B #C+2 #C+3
Block #A
Copy #D #A
If D #7 #15
Move
Copy A+1 A
Copy B+1 B
Copy D+1 D
If #D==#B #C+2 #C+3
Block #A
Copy #D #A
If D #7 #15
Flag

이 봇은 이동하고 공격하는 동안 자체 코드를 복구합니다.




1

빠른 냉동고

상대의 옆에 처해질 라인에 깃발을 복사하려고 시도하고, 공격 할 적이 없으면 움직입니다.

Block #13
Block #14
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14   
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14
If D #13 #14   
Copy 23 C
If E #15 #16
Move
Copy #23 *#*C
Copy D+1 D

처음 두 줄은 유효하지 않습니다. 그들은 # 13과 # 14가 필요합니다
Nathan Merrill

1

차단, 동결, 공격

Block #A        // start block loop
Copy A+1 A      // loop A from 0 to 23
If A #3 #4      
Copy 23 C       // repeat block loop
Copy 5 C        // exit block loop to attack/move loop
Move
If D #11 #5     // attack or move
Copy A+1 A      // loop A from 0 to 23
If A #9 #10
Copy 5 C        // repeat attack/move loop
Copy 23 C       // exit attack/move loop to block loop
Copy 11 C       // start of attack routine
Copy #23 *#*C   // freeze opponent
Copy #19 *#E    // copy flag to opponent
Copy #20 *#E    // copy flag to opponent
Copy #21 *#E    // copy flag to opponent
Copy #22 *#E    // copy flag to opponent
Copy D+1 D      // change direction
Copy 5 C        // repeat attack/move loop
Flag
Flag
Flag
Flag
Copy C+23 C     // freeze instruction, for copying

24 개 라인을 모두 차단 한 다음 이동 또는 공격 중 24 회 반복 한 다음 반복합니다. 공격에는 상대방을 얼려서 4 개의 깃발을 임의의 위치에 복사 한 다음 돌립니다.


1

숨기기, 차단, 공격

이 봇은 Block Freeze Attack을 기반으로합니다. 나는 If더 많은 깃발을 심을 수 있도록 더 작게하기 위해 문장 의 배치를 변경했습니다 . 또한 게임을 시작할 때 막을 시간을 사기 위해 도망갔습니다.

Copy D+1 D
Move           //buy some time by moving to a more secure location
Block #A+2
Copy A+1 A
If A #11 #17
Copy #23 *#E
Copy #22 *#E
Copy #21 *#E
Copy #20 *#E
Copy #19 *#E
Copy D+1 D
Copy 1 C
Move
If D #14 #15
Copy 3 C
Copy 11 C
Copy #18 *#*C
If D #16 #15
Copy C+23 C
Flag
Flag
Flag
Flag
Flag

1

로빙 바이러스

If D #6 #16
Move
Copy 23 C
Flag
Flag
Flag
Copy 6 C
Copy A+23 A
Copy #A *#A                     //clone previous line to enemy
Copy 23 *C                      //freeze enemy
If A #6 #16                     //loop or turn then continue
Copy 0 *C                       //reboot enemy
Copy 23 C                       //start moving again
Flag
Flag
Flag
Copy D+1 D                      //turn
Flag
Flag
Flag
Flag
Flag
Flag
Copy 22 C                       //freeze instruction

이 봇은 적을 찾을 때까지 방황하며, 멈춰서, 모든 코드를 자신의 것으로 바꾸고, 멈췄다가 다시 방황합니다.


1

감기

그것은 당신을 사실상 즉시 감염시키고 당신은 그것을 퍼뜨릴 것입니다. PhiNotPi의 기생충을 기반으로 , 일반적인 콜드 체크는 깃발을 복사 할 수 있는지 거의 즉시 확인합니다. 할 수없는 경우 임의의 값을 차단합니다. 상대가 없으면 조금 움직입니다.

Block #22
If D #8 #5
If D #8 #5
If D #8 #5
Copy 23 C
If E #6 #7
Copy D+1 D
Move
If *#E=#22 #15 #9
If *#E+1=#22 #16 #10
If *#E+2=#22 #17 #11
If *#E+3=#22 #18 #12
If *#E+4=#22 #19 #13
If *#E+5=#22 #20 #14
If *#E+6=#22 #21 #23
Copy #22 *#E
Copy #22 *#E+1
Copy #22 *#E+2
Copy #22 *#E+3
Copy #22 *#E+4
Copy #22 *#E+5
Copy #22 *#E+6
Flag
Block #E

1

인플루엔자

이것은 약간 증가 된 속도로 일반적인 감기 (기생충에 기초한)에 가깝습니다.

Move
Block #23
If D #8 #0
If D #8 #0
If D #8 #0
If D #8 #7
Copy 0 C
Copy D+1 D
If *#E #9 #10
Copy #23 *#E
If *#E+1 #11 #12
Copy #23 *#E+1
If *#E+2 #13 #14
Copy #23 *#E+2
If *#E+3 #15 #16
Copy #23 *#E+3
If *#E+4 #17 #18
Copy #23 *#E+4
If *#E+5 #19 #20
Copy #23 *#E+5
If *#E+6 #21 #22
Copy #23 *#E+6
Block #E
Flag

나는 이것이 어떤 종류의 차이를 보게되기를 고대한다. 5 번 라인의 # 5는 무한 루프를 유발할 것이며, # 7도 의도 한 것 같지 않습니다.
overactor

@overactor 감사합니다. 추가 라인을 추가하여 생성 된 오류입니다.
PhiNotPi

나는 고통을 아는 적이 있습니까?
overactor

1

브랜드 변경

Move
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
If D #10 #0
Copy 0 C
If *#E=#14 #11 #9
If *#E==#14 #13 #12
Copy D+1 D
Copy #14 *#E
Flag

이 봇은 적의 봇에서 깃발을 무작위로 찾아 우호적 인 깃발로 대체하여 성공을 탐지 한 후 돌아갑니다. Cancer bot에서 영감을 얻었습니다.

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