Salutations.
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 :
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 :
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!