给出两个字符串,每个字符串代表善恶双方的成员,找出哪一方将获胜。
好:霍比特人 - 1,男子 - 2,精灵 - 3,矮人 - 3,老鹰 - 4,奇才 - 10
邪恶:兽人 - 1,男子 - 2,战争 - 2,哥布林 - 2,乌鲁克海 - 3,巨魔 - 5,奇才 - 10
我写了一个函数来确定哪一方会赢。它大部分时间都有效,但有时表现得很奇怪。
function goodVsEvil(good, evil){
//string to array good and array evil in integers
var aG = good.split(" ").map(x=>parseInt(x))
var aE = evil.split(" ").map(x=>parseInt(x))
//calculate final score good and final score evil
var fSG = aG[0]*1 + aG[1]*2 + aG[2]*3 + aG[3]*3 + aG[4]*4 + aG[5]*10
var fSE = aE[0]*1 + aE[1]*2 + aE[2]*2 + aE[3]*2 + aE[4]*3 + aE[5]*5 + aE[5]*10
console.log('equals: '+ (fSG == fSE))
console.log('good > evil: '+(fSG > fSE))
console.log('good < evil: '+(fSG < fSE))
}
一些错误案例:
var result = goodVsEvil('1 0 0 0 1 0', '0 0 0 0 0 1 0')
//output
good: 5
evil: 5
equals: false
good > evil: false
good < evil: true
另一:
good: 10
evil: 10
equals: false
good > evil: false
good < evil: true
另一:
good: 2
evil: 2
equals: false
good > evil: true
good < evil: false
在这里,它工作正常
var result = goodVsEvil('1 1 0 0 0 0', '0 0 0 0 1 0 0')
good: 3
evil: 3
equals: true
good > evil: false
good < evil: false
这个谜题来自代码战:https://www.codewars.com/kata/good-vs-evil/train/javascript
答案 0 :(得分:2)
如果您记录fSG
和fSE
,您会注意到fSE
在第一个示例中实际上等于15
,而不是5
。
这是因为你在计算价值的行中有一个拼写错误。 您使用aE[5]
两次而不是aE[6]
:
var fSE = aE[0]*1 + aE[1]*2 + aE[2]*2 + aE[3]*2 + aE[4]*3 + aE[5]*5 + aE[5]*10
这应该是
var fSE = aE[0]*1 + aE[1]*2 + aE[2]*2 + aE[3]*2 + aE[4]*3 + aE[5]*5 + aE[6]*10
作为旁注,请尝试为您的变量找到更全面的名称。乱七八糟的字母组合让人很难理解价值背后的意图! : - )