【问题标题】:Are they the "same"? CodeWars他们是“一样的”吗?代码大战
【发布时间】:2017-07-12 04:24:28
【问题描述】:

这里是完整的问题描述

给定两个数组 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 19 的平方,
  5. 25921 161 的平方,以此类推。

如果我们把 b 的元素写成正方形就很明显了:

无效数组

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 可能不再返回 true

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

comp(a,b) 返回false,因为在b 中,132 不是任何数量的a 的平方。

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

comp(a,b) 返回false,因为在b 中,36100 不是任意数量 a 的平方。

备注

  1. ab 可能是 [](所有语言)。
  2. ab 可能是 nilnullNone(Haskell、Elixir、C++、Rust 除外)。
  3. 如果abnil(或null 或None),则问题没有意义,因此返回false
  4. 如果ab,则结果本身就很明显。

C 注释

  1. 这两个数组具有相同的大小 (> 0) 作为函数 comp 中的参数。

我的问题:

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

我卡在 1 项基本测试未通过(预计 结果:真,但我的代码返回假)

我的代码尝试

function isTrue(el){
  return el === true;
}

function comp(array1, array2){
  if(array1.length === 0 || array2.length === 0){
    return false;
  }
  var arr = array1.map(function(num){return num*num});
  var arr2 = [];
  for(var i = 0; i < arr.length; i++){
    if(array2.includes(arr[i])){
      arr2.push(true);
      var a = array2.indexOf(arr[i]);
     array2.splice(a,1);
    } else{
      arr2.push(false);
    }
  }
  return arr2.includes(false) ? false : true;
}

【问题讨论】:

  • 输入的范围是多少?我猜如果输入数字太大,你会得到有线行为。考虑取array2 中元素的根,而不是对array1 中的元素求平方。 developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
  • 我找到了解决方案,显然如果两个数组为空我应该返回 true。

标签: javascript arrays debugging compare


【解决方案1】:

最简单的方法:

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

【讨论】:

  • 每次我看到一个 1 到 3 行总结我的代码的故事长度我都感到惊讶。一个真正必须掌握一种语言的内置对象
  • 我在发布后很快就找到了答案,但它并没有这么干净。
  • 请注意,单行和/或短代码不一定是最佳的。我看到这里有多少互动......首先是.map,然后是.sort 两次。
猜你喜欢
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 2011-12-10
  • 2013-11-28
相关资源
最近更新 更多