Maison >interface Web >js tutoriel >Codewars - Trouvez la valeur aberrante de parité

Codewars - Trouvez la valeur aberrante de parité

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-05 19:30:47756parcourir

Salutations.

Codewars - Find The Parity Outlier

Je publie les défis Codewars et mon processus de réflexion dans cette série. J'utilise JS et Node 18 autant que possible. Par souci de clarté, j'en fais un usage équitable.

Le problème dit que nous devons trouver l'un ou l'autre de ces éléments : le nombre impair dans un tableau rempli de nombres pairs, ou le nombre pair dans un tableau rempli de nombres impairs. C'est à dire :
[ 0, 2, 4, 6, 8, 97, 14, 14, -2 ] -> 97
[ 1, 3, 2, -3, -7, 227, -183 ] -> 2


Tout d'abord, je vais vérifier de quel type de valeur aberrante il s'agit en regardant les 3 premiers éléments du tableau :

  • 3 éléments pairs =>
    0 i2(ximod2)=0sum_{substack{0leq ileq 2}} ( x_{i}mod 2 ) = 0 0≤i≤ 2 (xi mod2)=0
  • 1 élément impair =>
    0 i2(ximod2)=1sum_{substack{0leq ileq 2}} ( x_{i}mod 2 ) = 1 0≤i≤ 2 (xi mod2)=1
  • 2 éléments impairs =>
    0 i2(ximod2)=2sum_{substack{0leq ileq 2}} ( x_{i}mod 2 ) = 2 0≤i≤ 2 (xi mod2)=2
  • 3 éléments impairs =>
    0 i2(ximod2)=3sum_{substack{0leq ileq 2}} ( x_{i}mod 2 ) = 3 0≤i≤ 2 (xi mod2)=3

Tout ce que nous devons faire ensuite est de parcourir le tableau jusqu'à atteindre le nombre dont le modulo-2 est différent. Deux variantes dudit algorithme sont appliquées en conséquence :

// odd number in even array
while (number % 2 == 0 && counter < integers.length){
      number = integers[counter];
      counter++;
    }
// even number in odd array
while (number % 2 == 1 && counter < integers.length){
      number = integers[counter];
      counter++;
    }

En assemblant les pièces ensemble, nous obtenons :

function findOutlier(integers){
  let counter = 0;
  let number = 0;

  let a = integers[0] % 2;
  let b = integers[1] % 2;
  let c = integers[2] % 2;


  if (a + b + c <= 1){
    number = integers[0];
    while (number % 2 == 0 && counter < integers.length){
      number = integers[counter];
      counter++;
    }
  }
  else {
    number = integers[0];
    while (number % 2 == 1 && counter < integers.length){
      number = integers[counter];
      counter++;
    }
  }
  return number;
}

Et c'est exactement ce que j'ai ressenti lorsqu'il n'a pas réussi les tests :

Codewars - Find The Parity Outlier


Deuxièmement, j'ai dû chercher sur Google ce qui s'était passé. Il s'avère que je ne pensais pas que des nombres négatifs pourraient apparaître. Et j'ai donc dû lire comment JS gère les modulos négatifs


Pour la troisième étape, utilisez Math.abs() :

function findOutlier(integers){
  let counter = 0;
  let number = 0;

  let a = Math.abs(integers[0] % 2);
  let b = Math.abs(integers[1] % 2);
  let c = Math.abs(integers[2] % 2);


  if (a + b + c <= 1){
    number = integers[0];
    while (Math.abs(number) % 2 == 0 && counter < integers.length){
      number = integers[counter];
      counter++;
    }
  }
  else {
    number = integers[0];
    while (Math.abs(number) % 2 == 1 && counter < integers.length){
      number = integers[counter];
      counter++;
    }
  }
  return number;
}

Performance décente, mais pas si lisible. Il y a largement place à l’amélioration.

Prends soin de toi. Boire de l'eau ???.

Précédent

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn