Pair ou impair avec le modulo en PHP

Le reste de la division euclidienne, ça te rappelle des souvenirs ?

→ Challenge Correction: Greenoïd #1 - An unexpected encounter

Premier corrigé des challenges de l’histoire originale Greenoïd, créée à l’occasion de la Battle Dev Thales 2024.

Le premier challenge consistait à indiquer un caractère correspondant à un chiffre :

  • Si le chiffre était pair, il fallait indiquer un « R »
  • Si le chiffre était impair, il fallait indiquer un « L »

En PHP, et dans les autres langages, pour savoir si un nombre est pair ou impair, on peut utiliser le modulo 2, qui correspond au reste de la division euclidienne par 2 :

  • S’il reste 0 alors le nombre est pair
  • S’il reste 1 alors le nombre est impair
  • Et il n’y a pas d’autre possibilité !

Voici le code :

// Exemple de données issues du challenge :
$serial = '882554226158';

$response = '';
$length = strlen($serial);
for ($i = 0; $i < $length; $i++) {
   if ($serial[$i] % 2 == 0) {
      $response .= 'R';
   } else {
      $response .= 'L';
   }
}

echo $response;

Un peu d’explications :

  • On détermine la longueur de la chaine avant la boucle, c’est important pour ne pas recalculer la longueur à chaque itération.
  • On utilise $i pour accéder à chaque caractère de la chaine
  • En PHP, pas besoin de transformer le caractère « 3 » en 3. PHP le fait tout seul. On aurait pu le forcer en indiquant (int) avant
  • L’opérateur du modulo en PHP est %
  • Selon le cas on concatène ‘L’ ou ‘R’

Optimisation du code

On peut optimiser ce code PHP de la façon suivante :

// Exemple de données issues du challenge :
$serial = '882554226158';

$response = '';
foreach (str_split($serial) as $n) {
    $response .= $n % 2 ? 'L' : 'R';
}

echo $response;

Un peu d’explications :

  • On utilise le combo foreach + str_split pour éviter de passer par la boucle for et la manipulation de $i
  • On se passe du if/else en utilisant un ternaire

Pour aller + loin


Qui a codé ce superbe contenu ?

Keep learning

Other content to discover