0
votes

Pourquoi mon code ne renvoie-t-il que VRAI une fois dans la comparaison de 2 tableaux?

J'essaie de résoudre un problème de codewars et je n'arrive pas à faire fonctionner mon code.

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


1 commentaires

Salut Charlieyin, si une réponse sur cette page a résolu votre problème s'il vous plaît envisager de le marquer comme accepté. Merci


3 Réponses :


0
votes

Dans votre pour code> boucle, vous comprenez actuellement que le premier élément dans les tableaux de tri. Tout élément autre que le plus bas ne sera pas pris en compte, car une fois les deux les plus basses que sont comparées, la fonction renvoie true code> ou renvoie false code>.

Après le tri, utilisez Un chaque code> Vérifiez que chaque élément d'un tableau correspond à un autre: p>

p>

const a1 = [121, 144, 19, 161, 19, 144, 19, 11];
const a2 = [11 * 11, 121 * 121, 144 * 144, 19 * 19, 161 * 161, 19 * 19, 144 * 144, 19 * 19];
console.log(comp(a1, a2));

function comp(array1, array2) {
  if (array1.length !== array2.length) {
    return false;
  }
  const counts = {};
  for (const item of array1) {
    const squared = item ** 2;
    counts[squared] = (counts[squared] || 0) + 1;
  }
  for (const item of array2) {
    counts[item]--;
    if (counts[item] === -1 || Number.isNaN(counts[item])) {
      return false;
    }
  }
  return true;
}


0 commentaires

0
votes

La fonction n'est appelée qu'une fois et se termine lors de l'utilisation de l'instruction de retour. Vous ne vérifiez que la première valeur de la matrice.

Vous devez refactoriser votre fonction pour utiliser la boucle pour la boucle à l'extérieur et exécuter le test dans chaque cycle. P>

Je pense que cela fonctionne: P>

p>

a1 = [121, 144, 19, 161, 19, 144, 19, 11];
a2 = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19];


let newArray1 = a1.sort(function(a, b){
  return a - b;
});
let newArray2 = a2.sort(function(a, b){
    return a - b;
});

for (let i = 0; i<newArray1.length; i++){  
    console.log(comp(newArray1[i], newArray2[i])); //Run the test for every value in the array
}

function comp(value1, value2){
  let squareValue1 = value1*value1; 
  return squareValue1 === value2;
}


0 commentaires

0
votes

Vous pouvez le résoudre à l'aide d'un objet pour stocker le nombre d'occurrences de chaque valeur dans la matrice 1, puis passer dans le tableau 2 et décrémenter le nombre de survenus dans l'objet, et enfin, vous ithétiez à travers l'objet pour voir si toutes les valeurs sont 0.

Vérifiez ci-dessous: p>

p>

var a1 = [121, 144, 19, 161, 19, 144, 19, 11];
var a2 = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19];

function comp(array1, array2) {
  var temp = {};

  if(array1.length != array2.length)
    return false;

  for(let a of array1) {
    if(temp[a]) {
      temp[a]++;
    } else {
      temp[a] = 1;
    }
  }

  for(let a of array2) {
    let sqrt = Math.sqrt(a);
    if(temp[sqrt] && temp[sqrt] > 0) {
      temp[sqrt]--;
    } else {
      return false;
    }
  }

  var keys = Object.keys(temp);

  for(let key of keys) {
    if(temp[key] != 0)
      return false;
  }

  return true;
}

console.log(comp(a1, a2));


0 commentaires