他们是"相同"? CodeWars

时间:2017-07-12 04:24:29

标签: javascript arrays debugging compare

这里是完整的问题说明

给定两个数组a和b写一个函数comp(a,b)(在Clojure中的compSame(a,b)),它检查两个数组是否具有"相同的"元素,具有相同的多重性。 "同样"这里的意思是,无论顺序如何,b中的元素都是平方元素。

实施例

有效数组

a = [121, 144, 19, 161, 19, 144, 19, 11]  
b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]

comp(a, b)返回true,因为在b

  1. 121是11的平方,
  2. 14641是121的平方,
  3. 20736 144的广场,
  4. 361 the square of 19,
  5. 25921 161的平方,依此类推。
  6. 如果我们用正方形来编写b&#39的元素,那就显而易见了:

    无效数组

    a = [121, 144, 19, 161, 19, 144, 19, 11] 
    b = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]
    

    如果我们将第一个号码更改为其他号码,comp可能 不再<{1}}:

    true

    a = [121, 144, 19, 161, 19, 144, 19, 11] b = [132, 14641, 20736, 361, 25921, 361, 20736, 361] 会返回comp(a,b),因为在false中,132不是任意数量b的平方。

    a

    a = [121, 144, 19, 161, 19, 144, 19, 11] b = [121, 14641, 20736, 36100, 25921, 361, 20736, 361] 返回comp(a,b),因为在false中,36100不是任意数量的平方。

    说明

    1. ba可能是b(所有语言)。
    2. []a可能是bnilnull(Haskell,Elixir,C ++,Rust除外)。
    3. 如果Noneab(或为空或无),则问题无效,请返回nil
    4. 如果falsea 为空,结果就会很明显。
    5. 注意C

      1. 两个数组具有相同的大小(> 0),作为函数comp中的参数给出。
      2. 我的问题:

          

        你能想出一个我不符合要求的测试用例吗?   specefications?

             

        我被困在1个未通过的基本测试中(预期   result:true但我的代码返回false)

        MY CODE ATTEMPT

        b

1 个答案:

答案 0 :(得分:4)

最简单的方法:

const comp = (a1, a2) => {
  if (!a1 || !a2 || a1.length !== a2.length) return false;
  return a1.map(x => x * x).sort().toString() === a2.sort().toString();
}