Estoy tratando de resolver el kata de codewars mencionado anteriormente con las siguientes instrucciones:
Dadas dos matrices a y b, escriba una función comp(a, b) (ocompSame(a, b)) que verifique si las dos matrices tienen los "mismos" elementos, con las mismas multiplicidades (la multiplicidad de un miembro es el número de veces que aparece). "Igual" significa, aquí, que los elementos en b son los elementos en a al cuadrado, independientemente del orden.
Ejemplos Matrices válidas a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 361, 25921, 361, 20736, 361] comp(a, b) devuelve verdadero porque en b 121 es el cuadrado de 11, 14641 es el cuadrado de 121, 20736 es el cuadrado de 144, 361 el cuadrado de 19, 25921 el cuadrado de 161, y así sucesivamente. Se vuelve obvio si escribimos los elementos de b en términos de cuadrados:
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] Matrices no válidas si, por ejemplo, cambiamos el primer número a otra cosa, comp ya no vuelve verdadero:
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [132, 14641, 20736, 361, 25921, 361, 20736, 361] comp(a,b) devuelve falso porque en b 132 no es el cuadrado de ningún número de a.
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 36100, 25921, 361, 20736, 361] comp(a,b) devuelve falso porque en b 36100 no es el cuadrado de ningún número de a.
Los comentarios a o b pueden ser [] o {} (todos los idiomas excepto R, Shell). a o b puede ser nulo o nulo o Ninguno o nada (excepto en C++, Crystal, D, Dart, Elixir, Fortran, F#, Haskell, Nim, OCaml, Pascal, Perl, PowerShell, Prolog, PureScript, R, Racket, Rust , Concha, Vencejo). Si a o b son nulos (o nulos o ninguno, según el idioma), el problema no tiene sentido, por lo que devuelve falso.
Este es mi código, que está pasando las pruebas iniciales pero fallando algunas pruebas más tarde:
const comp = (a, b) => { function sortNumber(n1, n2) { return n1 - n2; } if (a === [] || b === [] || a === {} || b === {} || a === null || b === null) { return false } else { a = a.sort(sortNumber) b = b.sort(sortNumber) } for (let i = 0; i < a.length; i++) { for (let i = 0; i < b.length; i++) { if (Math.pow(a[i], 2) === b[i]) { return true } else { return false } } } }El mensaje de error que recibo es: también debería funcionar con entradas aleatorias: se esperaba que fuera falso pero se hizo verdadero (o viceversa). ¿Qué estoy haciendo mal?