javascript - CodeWars Kata 解决方案中的疑似舍入错误
问题描述
我正在尝试使用 Javascript在 Codewars 上解决这个 kata 。
这个kata要求你让游戏中的两种类型的怪物相互攻击魔法门之英雄无敌2,每个人轮流互相攻击,直到一个人获胜。
大多数测试现在都成功了,但是我仍然收到一些与预期结果相差 1 的错误。例如:
'预期:'5 野猪获胜',而不是:'4 野猪获胜'
'预期:'1 Skeleton(s) won',而不是:'2 Skeleton(s) won'
错误通常只是相差 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 }
不幸的是,我看不到测试失败的怪物的统计数据,所以很难看出我可能出错的地方。有人可以帮忙吗?(PS我知道代码可能更整洁,抱歉)
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());
}
解决方案
hitpoints2 < ((mon2.number - 1) * mon2.hitpoints)) {
这就是说:如果生命值2 小于(剩余怪物数量-1 怪物)乘以每个怪物的完整生命值,则计算剩余怪物数量。
但是最后一个怪物在战斗后没有完整的生命值。
推荐阅读
- css - 分页:如何使其响应
- java - Kubernetes pod FileLockException:锁定文件已被另一个进程锁定-neo4j 4.2
- xcode - Xcode 12.5 - 如何放大编辑器字体?
- java - 如何使用 Fragment 创建收藏按钮?
- node.js - 如何在 Mac M1 芯片组上安装带有 NVM 的旧版本 Node.js
- python - 如何使用 Outlook API 获取特定 Outlook 电子邮件的电子邮件
- flutter - 不能无条件访问属性“数量”,因为接收者可以为“空”。尝试使访问有条件(使用'?.')
- python - 如何在 numpy 结构化数组中设置多种类型?
- azure - 如何通过 az cli 创建多个存储复制策略
- php - 如何在文本域wordpress中添加html标签