Détermine si un triangle est équilatéral, isocèle ou scalène.
Un triangle équilatéral a ses trois côtés de la même longueur.
Un triangle isocèle a au moins deux côtés de la même longueur. (On le définit parfois comme ayant exactement deux côtés de la même longueur, mais pour les besoins de cet exercice, on dira au moins deux.)
Un triangle scalène a tous ses côtés de longueurs différentes.
Pour qu'une forme soit un triangle, tous ses côtés doivent avoir une longueur > 0, et la somme des longueurs de deux côtés quelconques doit être supérieure ou égale à la longueur du troisième côté.
Les triangles dégénérés sont des triangles où la somme des longueurs de deux côtés est égale à la longueur du troisième côté, par exemple 1, 1, 2.
On a choisi de ne pas inclure de tests pour les triangles dégénérés dans cet exercice.
Tu peux gérer ces situations si tu le souhaites, ou les ignorer sans problème.
Dans les équations :
Soient a, b et c les côtés du triangle.
Alors les trois expressions suivantes doivent être vraies :
a + b ≥ c
b + c ≥ a
a + c ≥ b
Voir l'inégalité triangulaire
L'implémentation peut prendre de nombreuses formes. Voici quelques sujets qui peuvent t'aider, selon l'approche que tu adoptes.
Ou peut-être que tu trouveras une approche qui n'utilise aucun de ces éléments !
L'exercice de base teste l'identification de triangles dont les côtés sont tous des entiers. Cependant, certains triangles ne peuvent pas être représentés par de simples entiers. Prenons un exemple simple : un triangle dont deux côtés égaux de longueur 1 forment un angle de 90 degrés. Son troisième côté a pour longueur la racine carrée de 2, qui est un nombre irrationnel (c'est-à-dire qu'il ne peut pas s'écrire sous la forme d'un entier ou d'une fraction).
Il serait fastidieux de réécrire les fonctions d'analyse pour gérer à la fois le cas des entiers et celui des nombres à virgule flottante, et particulièrement fastidieux de le faire pour tous les types d'entiers et de nombres à virgule flottante possibles : avec les variantes signées et non signées des largeurs de 8, 16, 32, 64 et 128 bits, on arriverait à 10 réimplémentations d'un code au fond identique, et ce avant même de parler des flottants !
Il existe une meilleure façon de faire : les génériques. En réécrivant ton Triangle sous la forme d'un Triangle<T>, tu n'écris ton code qu'une seule fois et tu confies au compilateur le travail de génération de toutes ces spécialisations. Note que pour utiliser des opérations mathématiques, tu devras contraindre ton type générique aux types qui prennent en charge ces opérations, à l'aide de traits.
Tu peux aussi lancer quelques tests bonus, qui testent ton implémentation avec des nombres à virgule flottante. Pour les activer, lance tes tests avec la fonctionnalité generic, comme ceci :
cargo test --features generic
Inscris-toi sur Exercism pour apprendre et maîtriser Rust avec 99 exercices, et un vrai mentorat humain, le tout gratuitement.