2016-12-01 20 views
1

それぞれが善悪の辺のメンバーを表す2つの文字列を与えられた場合、どちらの辺が勝つかを調べます。比較演算子が正しい値を返さない

グッド:ホビット - 1、メンズ - 2、エルフ - 3、ドワーフ - 3、イーグルス - 4、ウィザーズ - 10

バイオハザード:オーク - 1、メンズ - 2、ワ​​ーグ - 2、ゴブリン - 2 、Uruk Hai - 3、Trolls - 5、Wizards - 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 

このパズルはcodewarsからです:あなたはfSGfSEをログインした場合、あなたが実際にfSEはあなたの最初の例では15、ない5等しいことがわかりますhttps://www.codewars.com/kata/good-vs-evil/train/javascript

答えて

2

これは、値を計算する行にタイプミスがあるためです。 あなたが二回の代わりaE[6]aE[5]を使用している:

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 

する必要があり、あなたの変数のためのより包括的な名前を検索してみてください。 3文字の組み合わせをスクランブルすると、値の背後にある意図を理解することが本当に難しくなります! :-)

+0

Damnit!だから愚かな.... *一息* –

関連する問題