admin管理员组文章数量:1317909
HERE IS THE FULL QUESTION DESCRIPTION
Given two arrays a and b write a function p(a, b) (pSame(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]
p(a, b)
returns true
because in b
:
- 121 is the square of 11,
- 14641 is the square of 121,
- 20736 the square of 144,
- 361 the square of 19,
- 25921 the square of 161, and so on.
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]
If we change the first number to something else, p
may not return true
anymore:
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [132, 14641, 20736, 361, 25921, 361, 20736, 361]
p(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]
p(a,b)
returns false
because in b
, 36100 is not the square of any number of a.
Remarks
a
orb
might be[]
(all languages).a
orb
might benil
ornull
orNone
(except in Haskell, Elixir, C++, Rust).- If
a
orb
arenil
(or null or None), the problem doesn't make sense so returnfalse
. - If
a
orb
are empty the result is evident by itself.
Note for C
- The two arrays have the same size (> 0) given as parameter in function p.
MY QUESTION:
Can you e 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 p(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;
}
HERE IS THE FULL QUESTION DESCRIPTION
Given two arrays a and b write a function p(a, b) (pSame(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]
p(a, b)
returns true
because in b
:
- 121 is the square of 11,
- 14641 is the square of 121,
- 20736 the square of 144,
- 361 the square of 19,
- 25921 the square of 161, and so on.
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]
If we change the first number to something else, p
may not return true
anymore:
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [132, 14641, 20736, 361, 25921, 361, 20736, 361]
p(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]
p(a,b)
returns false
because in b
, 36100 is not the square of any number of a.
Remarks
a
orb
might be[]
(all languages).a
orb
might benil
ornull
orNone
(except in Haskell, Elixir, C++, Rust).- If
a
orb
arenil
(or null or None), the problem doesn't make sense so returnfalse
. - If
a
orb
are empty the result is evident by itself.
Note for C
- The two arrays have the same size (> 0) given as parameter in function p.
MY QUESTION:
Can you e 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 p(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;
}
Share
Improve this question
edited Jul 12, 2017 at 12:35
Ethan
4463 silver badges13 bronze badges
asked Jul 12, 2017 at 4:24
George YammineGeorge Yammine
231 silver badge5 bronze badges
2
-
What is the range of the input? I guess you get wired behavior if the input numbers are too large. Consider taking the root of elements in
array2
instead of squaring elements inarray1
. developer.mozilla/en/docs/Web/JavaScript/Reference/… – LudvigH Commented Jul 12, 2017 at 5:32 - I found the solution, apparently if the two arrays were empty I should have returned true. – George Yammine Commented Jul 12, 2017 at 8:31
1 Answer
Reset to default 7The easiest possible way:
const p = (a1, a2) => {
if (!a1 || !a2 || a1.length !== a2.length) return false;
return a1.map(x => x * x).sort().toString() === a2.sort().toString();
}
本文标签: javascriptAre they the quotsamequot CodeWarsStack Overflow
版权声明:本文标题:javascript - Are they the "same"? CodeWars - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742027079a2415744.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论