Écrire une fonction qui reçoit deux adresses IPv4 sous forme de chaînes de caractères et retourne le nombre d’adresses IP situées entre elles.
Le calcul doit :
- inclure la première adresse
- exclure la dernière adresse
Toutes les entrées sont des adresses IPv4 valides au format texte, et la seconde adresse est toujours strictement supérieure à la première.
🔗 Kata Codewars - Count IP Addresses
• • •
La fonction doit :
- recevoir deux chaînes représentant des adresses IPv4
- convertir chaque adresse en une valeur numérique exploitable
- retourner la différence entre la seconde et la première
Une adresse IPv4 est composée de 4 octets séparés par des points :
a.b.c.d
Chaque octet possède une valeur comprise entre 0 et 255.
• • •
L’idée consiste à convertir une adresse IPv4 en un entier non signé sur 32 bits.
Par exemple :
10.0.0.0
correspond à :
10 × 256³ + 0 × 256² + 0 × 256 + 0
Une fois les deux adresses converties, il suffit de calculer :
valeurFin - valeurDébut• • •
| Adresse de début | Adresse de fin | Résultat |
|---|---|---|
10.0.0.0 |
10.0.0.50 |
50 |
10.0.0.0 |
10.0.1.0 |
256 |
20.0.0.10 |
20.0.1.0 |
246 |
• • •
Une implémentation classique peut suivre les étapes suivantes :
- découper chaque adresse avec le séparateur
. - convertir chaque bloc en entier
- reconstruire la valeur numérique complète de l’adresse IPv4
- soustraire la première valeur à la seconde
Exemple de logique en C# :
(((a * 256) + b) * 256 + c) * 256 + dCette approche permet un calcul :
- simple
- fiable
- performant
• • •
Les tests unitaires associés sont disponibles dans le projet :
Les tests couvrent généralement :
- des écarts simples sur le dernier octet
- des passages d’un sous-réseau à un autre
- des écarts plus larges entre deux adresses IPv4
- la validité du calcul sur plusieurs cas représentatifs
• • •
La fonction doit :
- recevoir deux adresses IPv4
- les convertir en valeurs numériques
- retourner le nombre d’adresses comprises entre elles
- inclure la première et exclure la dernière
C’est un kata classique d’algorithmie autour de :
- la manipulation de chaînes
- la conversion numérique
- la représentation binaire / réseau des adresses IPv4