L’objet Math en JavaScript

Découverte de l’objet natif Math avec l’utilisation de Math.hypot() pour calculer une distance sans recoder la formule.

→ Challenge Correction: Bug-out Shelter #5 – Outpost Surveillance

On poursuit les corrigés de l’édition 2025 de la Battle Dev Thales. Dans ce challenge, il était question de déterminer la distance des abris par rapport à une base centrale. Pour cela, on avait des coordonnées qui étaient positionnées sur des lignes. Le tout dans un espace donc à 2 dimensions x et y.

Résolution du challenge

3 étapes dans la résolution de ce challenge :

  • Parsing et typage des données
  • Calcul mathématique
  • Conservation des abris qui remplissent la condition attendue

Voici un code possible :

const rayon = 20;
const result = [];

for (const infos of lines) {
  const [yA, xList] = infos.split(':');
  const yCoord = Number(yA);
  const xAs = xList.split(',').map(Number);

  const proches = xAs.filter(xA => Math.hypot(x - xA, y - yCoord) <= rayon);
  result.push(...proches);
}

console.log(`${result.length}:${result.join(',')}`);

Un peu d’explications :

  • On commence par stocker le rayon dans une variable (donnée issue de l’énoncé) pour le manipuler plus efficacement. On crée aussi un tableau result qui contiendra nos abris retenus.
  • On applique une boucle sur les lines
  • Il y a alors 2 séquences de parsing :
    • La première, avec split(‘:’) pour extraire la coordonnée y. On applique la fonction Number pour passer d’une chaine de caractères à un nombre.
    • La seconde avec split(‘,’) pour extraire les coordonnées x. On récupère alors un tableau, pour lequel on applique, à nouveau, la fonction Number sur chaque élément de ce tableau, grâce à map.
  • On crée un tableau proches qui contiendra les coordonnées X des abris qui remplissent la condition souhaitée. Cela en plusieurs étapes :
    • On utilise tout d’abord la méthode Math.hypot qui calcule l’hypoténuse d’un triangle, c’est à dire la distance euclidienne d’un point. Derrière cette méthode se cache le célèbre théorème de pythagore qui consiste à calculer la racine carré de la somme des carrés des 2 côtés ! Un classique ! Grâce à la méthode hypot, pas besoin de réécrire la formule. On verra ci-dessous que l’objet Math a d’autres méthodes disponibles.
    • On compare alors cette distance au rayon
    • Cette comparaison est utilisée sous forme de fonction fléchée dans un filtre (filter). A partir des éléments contenus dans le tableau xAs, on ne conserve donc que ceux qui remplissent la condition.
  • On ajoute tous les éléments du tableau proches dans result, en utilisant l’opérateur pour « déplier » le tableau et insérer ses valeurs une à une.
  • On affiche la réponse en utilisant la propriété length du tableau pour avoir le nombre d’éléments, et on applique la méthode join(‘,’) pour concaténer les valeurs, tout en les séparant par une virgule

L’objet Math en JavaScript

En JavaScript, comme dans d’autres langages, des objets ou librairies sont disponibles nativement pour réaliser certaines opérations classiques. C’est le cas de l’objet Math qui, comme son nom l’indique, propose des méthodes pour réaliser des opérations mathématiques basiques et/ou récurrentes.

Ma méthode hypot n’est pas forcément la plus connue mais elle existe bien et évite donc d’avoir à recoder le théorème de Pythagore.

D’autres méthodes sont également disponibles :

  • round(), floor(), ceil(), trunc() qui permettent de réaliser des arrondis
  • pow(), sqrt() pour les puissances et racines
  • min() ou max() pour déterminer un minimum ou un maximum dans un ensemble
  • sign() qui renvoie 1, -1 ou 0 selon le signe d’une valeur

Il y a également des constantes de disponibles :

  • Math.PI
  • Math.E

Ou d’autres méthodes un peu moins connues :

  • hypot() (utilisée ici)
  • random() pour obtenir une valeur aléatoire entre 0 et 1
  • cbrt() pour une racine cubique
  • sin(), cos() ou encore asin(), acos() pour des opérations géométriques
  • exp(), log() et autres variantes pour des calculs exponentiels ou logarithmiques

N’hésite pas à te référer à la documentation de Math pour tous les détails

Conclusion

Dans ce challenge, on a combiné plusieurs notions essentielles du JavaScript moderne : on a d’abord fait du parsing de chaînes pour extraire les coordonnées, puis on a manipulé des tableaux avec des méthodes comme map() et filter() afin de traiter les données de manière fluide et expressive.

Enfin, on a utilisé l’objet natif Math, et plus précisément Math.hypot(), pour s’appuyer sur une fonction intégrée fiable et lisible plutôt que de réécrire manuellement une formule mathématique.

Un bel exemple de code à la fois clair, concis et moderne, où JavaScript fait le travail efficacement.


Qui a codé ce superbe contenu ?

Keep learning

Other content to discover