算法要求:
通过这个例子我终于明白划拳规则是什么了。
1. “拳”代表数字0,”布”代表数字5。猜中双方伸出的两只手所对应的数字和即为正确。
2. 如果某一方说的数字小于自己伸出的手代表的数字和或者减去自己伸出的数字和后大于10 ,则另一方赢。
eg:
game([20,"Fist Fist"], [10,"Palm Palm"]);
should return "B Win!"
game([5, "Palm Palm"], [10, "Palm Palm"]); // 虽然B也猜错了,但是A说了一个不可能的数字
should return "B Win!"
代码如下:
function game(a,b) {
// 对数字求和
function getTimes (arrStr){
arrStr = arrStr.replace(/Fist/ig, "0");
arrStr = arrStr.replace(/Palm/ig, "5");
var newArr = arrStr.split(" ");
return Number(newArr[0]) + Number(newArr[1]);
}
var suma = Number(getTimes(a[1]));
var sumb = Number(getTimes(b[1]));
var sum = suma + sumb ;
if ( (sum == a[0] && sum != b[0]) || (suma <= a[0] && a[0] <= suma+10 && (b[0] < sumb || b[0] > sumb + 10)) ) {
return "A Win!";
} else if ( (sum != a[0] && sum == b[0]) || (sumb <= b[0] && b[0] <= sumb+10 && (a[0] < suma || a[0] > suma + 10)) ) {
return "B Win!"
} else {
return "Draw!";
}
}