Geo*_*ine 0 javascript arrays debugging compare
HERE IS THE FULL QUESTION DESCRIPTION
Given two arrays a and b write a function comp(a, b) (compSame(a, b) in Clojure) that checks whether the two arrays have the "same" elements, with the same multiplicities. "Same" means, here, that the elements in b are the elements in a squared, regardless of the order.
Examples
Valid arrays
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]
Run Code Online (Sandbox Code Playgroud)
comp(a, b) returns true because in b:
It gets obvious if we write b's elements in terms of squares:
Invalid arrays
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]
Run Code Online (Sandbox Code Playgroud)
If we change the first number to something else, comp may not return true anymore:
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [132, 14641, 20736, 361, 25921, 361, 20736, 361]
Run Code Online (Sandbox Code Playgroud)
comp(a,b) returns false because in b, 132 is not the square of any number of a.
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 36100, 25921, 361, 20736, 361]
Run Code Online (Sandbox Code Playgroud)
comp(a,b) returns false because in b, 36100 is not the square of any number of a.
Remarks
a or b might be [] (all languages). a or b might be nil or null or None (except in Haskell, Elixir, C++, Rust).a or b are nil (or null or None), the problem doesn't make sense so return false.a or b are empty the result is evident by itself.Note for C
MY QUESTION:
Can you come up with a test case where I do not meet the desired specefications??
I am stuck on 1 basic test not being passed (expected result: true but my code returns false)
MY CODE ATTEMPT
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;
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法:
const comp = (a1, a2) => {
if (!a1 || !a2 || a1.length !== a2.length) return false;
return a1.map(x => x * x).sort().toString() === a2.sort().toString();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2332 次 |
| 最近记录: |