嘘,这真的是第四吗?对于所有老用户来说,核心挑战是相同的,但是我们使用Java而不是自定义语言。如果您有兴趣,这里是过去三个 CodeBot 挑战。
CodeBots的目标是使您的机器人尽可能地具有病毒性。每个漫游器都带有一个Flag,并且您需要确保您的Flag 到处都是。
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()
在游戏结束时被调用,并且应返回您提交的唯一字符串。您的函数应始终返回相同的字符串。游戏结束时带有最多标记的提交将获胜。
存储
您有3种存储形式,一个AddressBook,一个Log和一个Variables。 这些存储形式是函数运行所在的bot的本地存储(因此,如果函数被复制,则每个对象的内容将有所不同)。所有这些对象都可以手动修改或清除。要获取这些对象,您的班级中有一个吸气剂(例如getLog()
)。
该通讯录存储列表ip地址,每一个地址类型,它可以让你在不同类型的地址进行分类。 AddressBook将始终至少包含1个地址(如果清除该地址,则会添加一个随机的地址)。不允许清除地址簿以获取多个IPAddress。
该日志存储有关的行动采取的所有行动,以及数据的列表。它还包括所有成功攻击的历史记录(尽管您不知道它们重写了哪些功能)
该变量对象允许你存储连接到一个字符串名称字符串变量。在游戏开始时,变量将包含一个变量,ID
其中包含一个随机生成的ID,该ID对于您的机器人类型是唯一的。
您还具有其他访问功能:
int getTurnNumber()
返回当前转弯的整数bool functionsMatch(ReadonlyBot, FunctionType)
测试以查看ReadonlyBot的函数是否与您的函数匹配IPAddress personalAddress()
返回您的IPAddress
如何实施
- 您可以从Github获取代码
- 将您的漫游器添加到该
\bots
文件夹,然后在其中添加对您的漫游器的引用controller\CodeBotFactory.java
- 您的漫游器必须扩展
codebots.bot.CodeBot
或codebots.bots.DefaultCodeBot
- 如果要运行控制器,则需要Java 8。
- 您可以运行代码(假设您位于
/src
文件夹中)使用javac codebots\*.java
进行编译,然后java codebots.Main
运行。 - 您的班级中可能没有任何非常数成员变量
- 不允许反思。
- 禁止使用上述方法之外的机器人(相同或不同类型)之间进行通信。
- 允许使用哑巴和/或自杀机器人,但所有机器人的功能应与现有条目不同。
- 如果您希望漫游器具有随机性,请使用
getRandom()
- 请尝试保持代码高效。我花了很多时间进行性能分析,并使控制器快速运行。
分数
105.2501 Expelliarmus!
104.5803我正在帮助!
104.2746我是谁?
103.8529笨拙机器人
103.2028替代者
102.7045混沌
102.4046隐士机器人
102.2849 Swarmer
100.5598随机机器人爱你
99.966信任信任!
99.0185 codebots.bots.DefaultCodeBot
91.2942 codebots.bots.MarkedBot
91.1423只是您友好的邻居邮件传递机器人。
89.4645无