编程竞赛:贸易

更新: 参与者的公告
更新2: 中期结果和公告

Hola再次宣布编程竞赛! 优胜者是预期奖品:

  1. 第一名:3000美元。
  2. 第二名:2000美元。
  3. 第三名:1000美元。
  4. 评审团可酌情授予400美元的特别奖。
  5. 如果您通过在CC中添加我们的地址向某人发送此竞赛的链接,并且该人获得了奖品,那么您将获得一半的奖品(当然,这不会损害获胜者的奖赏)。 对于一个获胜者,只有一个人可以收到这样的奖励-首先发送链接的人。

有趣的决定的作者将被邀请接受采访。



规则


英文竞赛条款可在GitHub上找到 。 以下是俄语翻译。
  • 使用此表单提交解决方案。 电子邮件不作任何决定。
  • 直到20187月20日23:59:59 UTC才做出决定。
  • 初步结果将于2018年7月27日发布,获奖者的最终公告- 20188月3日
  • 您可以多次发送决策,但每个参与者仅考虑最近的决策,该决策在接受工作的截止日期之前发送。
  • 为了进行测试,我们将使用Node.js v10.4.1 (发布时的当前版本)。 您可以在标准配置中使用解释程序支持的任何语言功能。
  • 所有解决方案代码必须在单个JS文件中
  • 解决方案应该在JS上。 如果您喜欢CoffeeScript或类似语言,则必须在提交之前使用JS翻译解决方案。
  • 如果您的JS文件是通过其他语言(例如CoffeeScript)生成,缩小和/或编译的产品,请附上包含源代码的存档,并最好附上该方法的描述。 该归档文件的内容将被发布,但我们不会对其进行测试。
  • 您无法加载任何模块 ,即使标准Node.js中包含的模块也是如此。
  • 一位参与者只能使用一个电子邮件地址来提交决定。 禁止从不同的地址发送多个合谋决定; 参与该计划的所有决定将被取消资格。
  • 我们需要知道您的全名,但是如果您愿意,我们将改为发布别名。 我们将对您的电子邮件地址保密。
  • Hola的现任和前任员工及其直系亲属只能参加比赛,不得领取奖金。
  • 在本出版物的评论中或通过电子邮件提出有关任务条件的问题。

贸易方式


假设我们有一本书,两个帽子和三个球。 您和另一位参与者必须决定如何在你们两个之间分享这种好处。 对您来说,这本书的价值为4美元,每个球的价值为2美元,帽子没有价值。 对于一个合伙人来说,这些相同的物品可能具有不同的价值,但是您知道,所有物品对他来说都是一样有价值的,在本例中为10美元。

您和伙伴轮流建议有关商品的部分。 反过来,你们中的一个可以接受先前的报价(除非是第一阶段的报价),或者提出还价。 谈判限于5轮,双方最多可以提出10项建议。 如果在此期间达成协议,那么你们每个人都将获得离开他的物品的总价值(每个物品都根据其自身的价值因素)。 如果没有达成协议,也就是说,上一轮的最后一句话是提出要约,而不是同意,那么没人会得到任何东西。 如果合伙人之一中断谈判,也会发生同样的事情。

这是谈判如何进行的一个示例:

  1. 你:我要一本书和两个球。 您将得到一个球和两个帽子。
  2. 伙伴:我不同意。 我想要所有的球和一顶帽子; 你会得到一本书和一顶帽子。
  3. 您:我不同意。 我想要一本书和一个球。 您将获得两个球和两个帽子。
  4. 伙伴:我同意。

您可能不知道这一点,但是对于合作伙伴而言,这些物品的价值如下:每球2美元,每顶帽子2美元,这本书没有价值。 该协议为您带来6美元,为合作伙伴带来8美元。

通常,存在两种或多种类型的对象,每种类型的对象的数量为正整数。 每个伙伴的每种对象类型的值都是一个非负整数。 尽管单个对象的值有所不同,但两个对象的所有对象的总值相同。 关于划分的建议应在伙伴之间分配所有对象,且不得追踪。 单个对象没有碎片。

您的任务是编写一个脚本,以寻求最高价值的交易(对您自己而言)。

解决方案


解决方案是没有依赖项的Node.js模块。 模块导出应该是一个类:

module.exports = class {
    constructor(me, counts, values, max_rounds, log){
        ..
    }
    offer(o){
        ...
    }
}

. :

  • me — 0, , 1, .
  • counts — , . 2 10 .
  • values — , counts, .
  • max_rounds — ( ).
  • log — , (console.log ).

offer , . o — , counts. , . , , o undefined.

offer undefined, ( , o undefined). , counts, , . , o, offer .

1 . , , , , .

, , .

example.js , . , ; , . log.


haggle.js -, . --help, . ( , npm install src.)

, . , , , , , , . . , «» «», , .

: 3 , 6 , $10, 5 . , , .

c3.large (. ) Amazon AWS Ubuntu 14.04 (amd64). .

, ; (). , , , ( --log).


, . -: «», .

(3 , 6 , $10, 5 ). 1 , . :

wss://hola.org/challenges/haggling/arena/standard

haggle.js, - . --id: , . . . «» , .

— . , . - , .

, , -, , UNIX shell:

while true; do node haggle.js --id me@example.com:1234abcd myscript.js wss://hola.org/challenges/haggling/arena/standard; done



. !

, , . , ; , ; CoffeeScript , , . README (-). tar.gz, tar.bz2 zip. , ( JS-, ).

JS- 64 . , , - «» . 64 , , .

, , , .

!

Source: https://habr.com/ru/post/zh-CN414723/


All Articles