首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >定时炸弹(KoTH)

定时炸弹(KoTH)
EN

Code Golf用户
提问于 2021-05-03 11:53:16
回答 7查看 445关注 0票数 4

在这个挑战中,玩家需要尽可能晚地修改定时炸弹,而不会被打到脸上。

力学

N是机器人的数量加上一个。每一轮,每个机器人都会收到以下论据:

  • 所有机器人按升序播放的最后一轮数字。
  • 上一轮得到的分数。如果最后一轮输了的话。

机器人被要求在1到N (包含1)之间播放一个整数。在所有的机器人播放它们的数字之后,一个计数器将被初始化为来自所有机器人的数字之和的一半。然后,每个机器人从计数器中减去它播放的数字。机器人是从最低到最高的排序。同样数量的机器人被认为是同时减去计数器。当计数器达到零或变成负数时,炸弹就会爆炸。

评分

炸弹爆炸后,这一轮结束,这一轮的点数计算如下:

  • 在爆炸之前玩过的机器人得到的点数相当于这一轮的两倍。
  • 当爆炸失去与这一轮相同的点数时,机器人会玩。
  • 爆炸后玩过的机器人既没有得到也没有收到点数。

示例回合:

  • 播放号码:[1,2,3,4,5]。初始计数器为7.5,炸弹在4上爆炸,1、2和3的机器人分别获得2、4和6分,4点的机器人损失4分,5点的机器人没有损失点数。
  • 播放号码:[1,1,2,4]。初始计数器为4,炸弹在2上爆炸。1的机器人获得2点,机器人2损失2,4的机器人也不会损失点数。
  • 播放号码:[3,3,3,3]。最初的计数器是6,炸弹在3分上爆炸,所有的机器人都损失3分。

每一轮的积分加在那一轮的总得分中。每一轮由1000轮组成,将有10轮。最后的总分是每次运行的总和,最终得分最高的机器人最终获胜。

Specifications

挑战在于JS。

您的bot必须是一个具有run方法的对象,该方法以一个数字数组和一个数字作为输入,并返回一个介于1和N之间的整数。超出有效范围的值将四舍五入并夹紧。如果该值不是数字,则将选择有效范围内的数字,并且不指定选择该数字的行为。

在第一轮中,给定的数字数组将被随机数初始化,而上一轮点数的个数将为0。

其他规则

  • 允许在机器人的属性中存储数据。
  • 您可以使用Math.random方法。在评分期间,将使用seedrandom.min.js,将一个秘密字符串与运行号连接起来,作为每次运行的种子。秘密字符串的md5是4311868bf10b3f7c1782982e68e6d7ca,用于证明我在挑战后没有更改密钥。
  • 您可以使用助手函数sum
  • 禁止尝试访问bot自身属性之外的任何其他变量。
  • 适用标准漏洞。

控制器的代码可以找到这里。请随时指出我的代码中的错误,谢谢。

示例机器人

代码语言:javascript
运行
复制
{
  // Example bot
  // It always play the middle number.
  name: "Middle", 
  run(number) {
    return Math.round((numbers.length+2)/2);
  }
}
代码语言:javascript
运行
复制
{
  // Example bot
  // It starts at 1, advances when it got points last round,
  // and resets when it lost points.
  name: "Advance and reset",
  last: 1, // Setting properties is allowed
  run(numbers, points) {
    var own = this.last;
    if(points > 0){
      own = Math.min(this.last+1, numbers.length+1);
    }
    if(points < 0){
      own = 1;
    }
    this.last = own;
    return own;
  }
}

以上两个例子机器人也将在游戏中发挥。

的提交日期是2021-05-06 12:00,但可能会很宽松,这取决于我在上述时间之后的上网时间。

EN

回答 7

Code Golf用户

发布于 2021-05-03 12:35:14

代码语言:javascript
运行
复制
{
  name: "Playing It Safe",
  run(numbers) {
    return 1;
  }
}
票数 5
EN

Code Golf用户

发布于 2021-05-03 12:25:27

代码语言:javascript
运行
复制
{
  name: "33%",
  run(numbers) {
    return numbers[Math.floor(numbers.length/3)];
  }
}
代码语言:javascript
运行
复制
{
  name: "Pure random",
  run(numbers) {
    return Math.floor(Math.random() * (numbers.length+1))+1;
  }
}
代码语言:javascript
运行
复制
{
  name: "Copy random",
  run(numbers) {
    return numbers[Math.floor(Math.random() * numbers.length)];
  }
}
代码语言:javascript
运行
复制
{
  name: "Alternate",
  round: 0,
  run(numbers) {
    this.round++
    return (this.round % 2)? 1 : (numbers.length + 1)
  }
}
票数 4
EN

Code Golf用户

发布于 2021-05-03 12:41:17

智能随机

代码语言:javascript
运行
复制
{
name: "Smart Random", 
  run(numbers) {
    var random_int = Math.floor(Math.random() * 3 * (numbers.length+1)/4);
    return random_int
  }
}

返回包含在0到3/4N之间的随机整数。

我希望这是可行的-这是我的第一个JS和我的第一个KoTH答案。

票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/224969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档