CodeWars Kata解决方案中的可疑舍入错误

时间:2019-08-23 08:21:40

标签: javascript function object

我正在尝试使用Javascript解决this kata on Codewars

此数据包要求您将“威武英雄”和“魔法2”游戏中的2种怪物相互对峙,彼此轮流互相攻击,直到获得胜利为止。

大多数测试现在都成功了,但是我仍然收到一些错误,这些错误与预期结果不符。例如:

  

“预计:'5头野猪获胜',而不是:'4头野猪获胜'

     

“预计:'赢得了1个骷髅”,而获得了:'赢得了2个骷髅'

错误通常仅出现1或2,并且似乎是双向的(我的结果太高或太低)。

我一直在摆弄我的代码,似乎找不到解决方法。

示例怪物包括:

{ "type": "Roc",         "hitpoints": 40, "number": 6,  "damage":8 }
{ "type": "Unicorn",     "hitpoints": 40, "number": 4,  "damage":13}
{ "type": "Titan",       "hitpoints": 300,"number": 1,  "damage":50}
{ "type": "Battle Dwarf","hitpoints": 20, "number": 25, "damage":4 }
{ "type": "Paladin",     "hitpoints": 50, "number": 8 , "damage":20}
{ "type": "Skeleton",    "hitpoints": 4 , "number": 100,"damage":3 }

不幸的是,我看不到测试失败的怪物的统计信息,因此要弄清楚我哪里可能出了错是很棘手的。有人能帮忙吗? (P.S.我知道代码可能比较整洁,对不起)

function whoWouldWin(mon1, mon2) {
  var hitpoints1 = mon1.hitpoints * mon1.number;
  var hitpoints2 = mon2.hitpoints * mon2.number;

  function attack() {
    damage1 = (mon1.number * mon1.damage);
    hitpoints2 -= damage1;

    if (hitpoints2 < ((mon2.number - 1) * mon2.hitpoints)) {
      mon2.number = Math.ceil(hitpoints2 / mon2.hitpoints);
    }

    if (mon2.number <= 0) {
      return (mon1.number + " " + mon1.type + "(s) won");

    } else {
      damage2 = (mon2.number * mon2.damage);
      hitpoints1 -= damage2;

      if (hitpoints1 < ((mon1.number - 1) * mon1.hitpoints)) {
        mon1.number = Math.ceil(hitpoints1 / mon1.hitpoints);
      }

    }
    if (mon1.number <= 0) {
      return (mon2.number + " " + mon2.type + "(s) won");

    } else {
      return (attack());
    }
  }
  return (attack());
}

1 个答案:

答案 0 :(得分:0)

hitpoints2 < ((mon2.number - 1) * mon2.hitpoints)) {

这是说:如果hitpoints2小于(每个怪物剩下的-1个怪物的数量)乘以每个怪物的全部命中点,则计算剩余的怪物数量。

但是最后一个怪物在战斗后没有完整的生命值。