注意:本比赛的获胜者是杰克!不再接受任何提交。
这是应对挑战之王的聊天室。这是我的第一个,所以我很愿意提出建议!
“收割者”是由“解决问题的艺术”开发的一种游戏概念,涉及耐心和贪婪。在修改了游戏以适应KOTH风格的比赛之后(感谢@NathanMerrill和@dzaima的建议和改进),这就是挑战。
游戏的工作原理如下:我们有一个称为Reap的值,该值在每个刻度线内乘以给定的常数。每次滴答之后,每个漫游器都可以选择“收获”,这意味着将Reap的当前值添加到一个人的分数中,并将Reap降低到1。
但是,机器人必须在“收割”之间等待一定数量的滴答声,而赢得游戏所需的点数也必须固定。
很简单?这是您的输入:
输入输出
您将在Python 3中编写一个需要3个输入的函数。第一个是self
,用于引用类对象(稍后显示)。第二个是Reap
,如果您要“收割”您将获得的收割的当前值。第三个是prevReap
,在上一个滴答声中收获的机器人列表。
您可以在函数中访问的其他对象:
self.obj: An object for your use to store information between ticks.
self.mult: The multiplier that Reap is multiplied by each tick
self.win: The score you need to win
self.points: Your current set of points
self.waittime: The amount of ticks that you must wait between reaps during the game
self.time: The number of ticks since your last reap
self.lenBots: The number of bots (including you) in the game.
self.getRandom(): Use to produce a random number between 0 and 1.
你必须不编辑这些对象的内容,除了self.obj
。
您必须输出1
才能收割,而其他任何(或什么都没有)则无法收割。请注意,如果您没有等待足够的滴答声就收割,我将忽略您选择收割的事实。
规则
我将使用的参数是winning_score=10000
,multiplier=1.6-(1.2/(1+sqrt(x)))
,waittime = floor(1.5*x)
其中x
是在KOTH机器人的数量。
- 当一个或多个玩家达到获胜分数时,游戏结束。
- 当多个机器人要求一次收割时,将优先考虑等待时间更长的机器人(在平局的情况下,等待最长时间的所有机器人都可以收割并获得收割中的积分)
- 您的机器人在5个滴答声中平均花费的时间不得超过100毫秒。
- 如果要导入库,请询问!我将尝试添加可在桌面版Python上运行的所有库(已经导入了数学:可以随时使用它)
- 同样,禁止使用KoTH的所有标准漏洞,例如重复的bot,1-up bot等。
- 任何使用任何随机性的漫游器都必须使用
getRandom
我提供的功能。
您可以在下面的TIO链接中找到控制器。若要使用它,请将函数的名称添加BotList
为字符串,然后将函数添加到代码中。修改multiplier
以更改收割乘以每个刻度的收益,修改winning_score
以更改结束游戏所需的分数,并修改waittime
以更改在两次收割之间等待的滴答数。
为了方便起见,这里有一些示例(相当愚蠢的)机器人。不允许提交与这些机器人类似的机器人。但是,它们演示了控制器的工作方式。
def Greedybot(self,Reap, prevReap):
return 1
def Randombot(self,Reap, prevReap):
if self.obj == None:
self.obj=[]
self.obj.append(prevReap)
if self.getRandom()>0.5:
return 1
对于那些感兴趣的人,这里是Controller并内置了15个提交内容:在线试用
最终结果
他们终于在这里了!检查上面的TIO链接,查看我用来生成最终排名的代码。结果并不十分有趣。我用不同的随机种子进行了1000次运行,结果是
1000 wins - Jack
0 wins - everyone else
祝贺赏金冠军杰克!(又名@Renzeee)
len(BotList)
吗?
25
游戏中的机器人所做的描述。不过也要先等一下别人的机器人。Rushabh Mehta,是否会在所有机器人都将运行并确定赢家的最后期限/最后日期?