esh,이게 진짜 4 일까? 모든 이민자들에게있어 핵심 과제는 동일하지만 사용자 정의 언어 대신 Java를 사용하고 있습니다. 관심이있는 경우를 대비 하여 지난 3 가지 CodeBot 과제 가 있습니다.
CodeBots의 목표는 봇을 가능한 한 바이러스 성으로 만드는 것 입니다. 각 봇은 깃발을 가지고 있으며, 깃발이 어디에나 있는지 확인해야합니다 .
API
봇은 표준화 된 "프로토콜"을 따르며 봇은 다음 단계를 동 기적으로 진행합니다.
IPAddress selectMessageRecipient()
봇이 "친근한"메시지를 보낼 사람을 선택할 수 있습니다.Message sendMessage()
봇이 그가 보낼 메시지의 내용을 선택할 수 있도록합니다.processMessage(IPAddress, Message)
봇이받는 각 메시지에 대해 호출됩니다.FunctionType selectFunctionToBlock()
현재 턴에 대한 함수 덮어 쓰기를 차단합니다. 7 단계를 참조하십시오.IPAddress selectAttackTarget()
봇이 DDOS를 원하는 사람을 선택할 수 있습니다. 봇이 동시에 3 개의 봇을 대상으로하는 경우 DDOS 공격이 성공합니다. 공격이 성공하면 각 공격자는 6 단계와 7 단계를 수행 할 수 있습니다.readData(ReadonlyBot)
봇이 취약한 봇에 저장된 데이터를 읽을 수 있도록합니다.FunctionType selectFunctionToReplace()
이 도전의 핵심입니다 . 봇에서 봇으로 복사하려면 1 개의 기능 (여기에 나열된 8 개 중 하나)을 선택할 수 있습니다. 그런 다음 함수 대신 함수가 호출됩니다. . 여러 봇이 동일한 기능을 선택하면 임의의 봇이 성공합니다.String getFlag()
게임이 끝날 때 호출되며 제출에 고유 한 문자열을 반환해야합니다. 함수는 항상 같은 문자열을 반환해야합니다. 게임이 끝날 때 가장 많은 깃발을 가진 제출이 승리합니다.
저장
저장 영역에는 AddressBook , Log 및 Variables의 3 가지 형식이 있습니다. 이러한 스토리지 형식은 함수가 실행중인 봇에 대해 로컬입니다 (따라서 함수가 복사되면 각 오브젝트의 내용이 다름). 이러한 모든 개체는 수동으로 수정하거나 지울 수 있습니다. 이러한 객체를 얻으려면 클래스에 getter가 있습니다 (예 :) getLog()
.
주소록은 목록을 저장 하여 IPAddress A를 각 인 AddressType 당신이 주소의 다른 유형을 분류 할 수 있습니다. 주소록 에는 항상 최소 1 개의 주소가 포함됩니다 (삭제 된 경우 임의 주소가 추가됨). 여러 IP 주소 를 얻기 위해 주소록 지우기 것은 허용되지 않습니다.
로그 작업에 대한 모든 취한 조치뿐만 아니라 데이터의 목록을 저장합니다. 또한 모든 성공적인 공격에 대한 이력도 포함합니다 (어떤 기능을 덮어 썼는지 모르지만)
변수 객체는 문자열 이름에 부착 된 문자열 변수를 저장할 수 있습니다. 게임 시작시 변수 에는 단일 변수가 포함됩니다.ID
여기에는 봇 유형에 고유하게 임의로 생성 된 ID가 포함됩니다.
다른 액세스 기능도 있습니다.
int getTurnNumber()
현재 턴과 정수를 반환bool functionsMatch(ReadonlyBot, FunctionType)
ReadonlyBot의 기능이 사용자의 기능과 일치하는지 테스트IPAddress personalAddress()
IP 주소를 반환
구현하는 방법
- Github 에서 코드를 얻을 수 있습니다
\bots
폴더에 봇을 추가 한 다음 봇에 대한 참조를controller\CodeBotFactory.java
- 당신의 봇은 연장
codebots.bot.CodeBot
하거나codebots.bots.DefaultCodeBot
- 컨트롤러를 실행하려면 Java 8이 필요합니다.
- 컴파일 하고 실행
/src
하는javac codebots\*.java
데 사용하여 코드를 ( 폴더 에 있다고 가정) 실행할 수 있습니다java codebots.Main
. - 당신은 할 수 있지 어떤 상수가 아닌 멤버 변수를 클래스에
- 반사는 허용되지 않습니다.
- 위에 나열된 방법 이외의 봇 (동일 또는 다른 유형) 간의 통신 형태는 허용되지 않습니다.
- Dumb 및 / 또는 Suicidal 봇은 허용되지만 모든 봇은 기능적으로 기존 항목과 달라야합니다.
- 봇에서 임의성을 원한다면
getRandom()
- 코드를 효율적으로 유지하십시오. 컨트롤러를 빠르게 프로파일 링하고 만드는 데 많은 시간을 보냈습니다.
점수
105.2501 Expelliarmus!
104.5803 도와 드리겠습니다!
104.2746 나는 누구입니까?
103.8529 Dumb Bot
103.2028 Replacer
102.7045 Chaos
102.4046 Hermit Bot
102.2849
Swarmer 100.5598 랜덤 봇은 당신을 사랑합니다
99.966 Trust in Trust!
99.0185 codebots.bots.DefaultCodeBot
91.2942 codebots.bots.MarkedBot
91.1423 친절한 동네 우편 배달 로봇.
89.4645 null