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

Codewars - Trouvez la valeur aberrante de parité

Mary-Kate Olsen
Libérer: 2025-01-05 19:30:47
original
746 Les gens l'ont consulté

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++;
    }
Copier après la connexion

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;
}
Copier après la connexion

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;
}
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal