Codewars中的Javascript Kata中出现意外结果

时间:2019-12-04 21:23:19

标签: javascript function

基本上,我应该构建一个函数,该函数将为我提供与以下测试用例相同的输出;

Test.assertSimilar(testit(0,1), 1, "")
Test.assertSimilar(testit(1,2), 3, "")
Test.assertSimilar(testit(10,20), 30, "")
//a*b?
Test.assertSimilar(testit(1,1), 1, "")
Test.assertSimilar(testit(1,3), 3, "")

这是我想出的;

function testit(a,b){
  return b >= (2*a) ? a+b : a*b;
}

从本质上讲,逻辑是:如果b大于或等于2a,则将a与b相加,如果不将a与b相乘。 最后一个测试用例返回4,但我不知道为什么会发生这种情况。我很好奇我在这里缺少什么,或者是否存在一些我不知道导致的基本原理这发生。从逻辑上看,它应该返回1 * 3 = 3。

1 个答案:

答案 0 :(得分:0)

查看测试用例,您描述的逻辑不适用于最后一个测试用例。实际上3大于两倍1,因此它将是一个加法,而1 + 3确实是4。因此,您必须找到另一个逻辑。

尽管这些测试用例不足以真正确定逻辑到底是什么,但它们确实适用于简单的按位或运算:

const testit = (a, b) => a | b;

test(0,1,    1)
test(1,2,    3)
test(10,20, 30)
test(1,1,    1)
test(1,3,    3)

function test(a, b, expect) {
    let result = testit(a, b);
    console.log(`testit(${a},${b}) = ${result}, expect ${expect}`);
}