Vous allez écrire ici un programme qui calcule la compatibilité entre deux prénoms. Suivez les instructions suivantes pour remplacer les TODO du programme ci-dessous.
Algorithme
Vous croyez avoir trouvé votre âme sœur, mais vous voulez en avoir le c♥eur net ? Vous ne serez pas déçu d’être venus aujourd’hui, car vous allez apprendre le secret d’un couple heureux. J’ai nommé, la numérologie des prénoms.
« Parce que vos prénoms en disent long sur vos personnalités, découvrez s’ils sont fait l’un pour l’autre... » (Elle.fr)
L’algorithme infaillible pour calculer la compatibilité de deux prénoms que nous avons sélectionné (issu d’un site de référence) est le suivant :
Étant donné deux prénoms (tristan et yseult), on remplace chaque lettre par un chiffre entre 1 et 9, qui correspond au tableau suivant :
1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z Vous remarquerez donc que la valeur d’une lettre est sa position dans l’alphabet (en commençant à compter à partir de zéro !), modulo
9, plus1.Par exemple,
kest la lettre10de l’alphabet10 % 9 + 1 = 2etaest la lettre0de l’alphabet0 % 9 + 1 = 1.tristan ⮕
{2, 9, 9, 1, 2, 1, 5}yseult ⮕
{7, 1, 5, 3, 3, 2}On additionne ensuite les chiffres du prénom deux par deux, en laissant le dernier intact s’il y a un nombre impair :
(tristan)
{2, 9, 9, 1, 2, 1, 5}⮕{11, 10, 3, 5}(yseult)
{7, 1, 5, 3, 3, 2}⮕{8, 8, 5}On transforme chaque nombre au-dessus de 9 en un chiffre de 1 à 9 en additionnant les chiffres qui le composent :
Par exemple,
11donnera2.(tristan)
{11, 10, 3, 5}⮕{2, 1, 3, 5}(yseult)
{8, 8, 5}⮕{8, 8, 5}On additionne deux par deux les chiffres qui restent :
(tristan)
{2, 1, 3, 5}⮕{3, 8}(yseult)
{8, 8, 5}⮕{16, 5}On transforme à nouveau les nombres supérieurs à 9 en chiffres de 1 à 9 :
(tristan)
{3, 8}⮕{3, 8}(yseult)
{16, 5}⮕{7, 5}On additionne à nouveau les chiffres deux par deux :
(tristan)
{3, 8}⮕{11}(yseult)
{7, 5}⮕{12}On transforme les nombres supérieurs à 9 en chiffres :
(tristan)
{11}⮕{2}(yseult)
{12}⮕{3}Quand on n’a plus qu’un seul chiffre pour chaque prénom, on calcule la compatibilité entre les deux. Plus la différence entre eux est grande, moins il y a de compatibilité :
Différence 0 1 2 3 4 5 6 7 8 Compatibilité 100% 87.5% 75% 62.5% 50% 37.5% 25% 12.5% 0% On peut donc dire avec certitude que la compatibilité amoureuse entre Tristan et Yseult est de 87.5%.
Décomposition en sous-problèmes
La fonction de plus haut niveau que vous devrez implémenter est la fonction compatibility définie dans le code ci-dessous.
Mais pour ce faire, vous devrez créer d’autres fonctions.
Étapes à suivre
Pour implémenter les fonctions nécessaires, vous devrez suivre les étapes suivantes.
Les spécifications de chaque fonction sont à chaque fois définies dans le code ci-dessous.
Implémentation de la fonction compatibility
En une dizaine de lignes, vous allez :
- Calculer le score du
prenom1 - Calculer le score du
prenom2 - Calculer la différence (en valeur absolue) entre les deux
- Calculer la compatibilité en multipliant la différence par
12.5et soustraire le total de100.
Implémentation de la fonction score
Cette fonction, un peu difficile, est déjà implémentée pour vous. Elle utilise toutefois des fonctions que vous devrez implémenter vous-mêmes :
add_two_digitsnumbers_to_digits
Implémentation de la fonction add_two_digits
Cette fonction permet d’additionner deux par deux les chiffres passés en arguments.
Il n’y a pas de type de retour : le résultat est copié au fur et à mesure dans chiffresOut.
Implémentation de la fonction numbers_to_digits
Cette fonctions transforme tous les nombres d’un tableau en nombres de 1 à 9.
Testez !
Maintenant que tout est implémenté, n’hésitez pas à tester : entrez votre prénom et le prénom de quelqu’un d’autre, et voyez si ça vaut le coût d’essayer ou si ... next !
J’arrive. J’arrive. Mais qu’est-ce que j’aurais bien aimé Encore une fois prendre un amour Comme on prend le train, pour plus être seul, Pour être ailleurs, pour être bien. J’arrive. J’arrive. Mais qu’est-ce que j’aurais bien aimé Encore une fois remplir d’étoiles Un corps qui tremble et tomber mort, Brûlé d’amour, le cœur en cendres.
Exemple
Par exemple, si l'utilisateur indique les prénoms "tristan" et "yseult", le programme devrait afficher :
Entrez un premier prénom: tristan Entrez un second prénom: yseult La compatibilité de tristan et yseult est de 87.500 %
Et si l'utilisateur indique les prénoms "alice" et "bob", le programme devrait afficher :
Entrez un premier prénom: alice Entrez un second prénom: bob La compatibilité de alice et bob est de 75.000 %
Et si l'utilisateur indique les prénoms "victor" et "bobette", le programme devrait afficher :
Entrez un premier prénom: victor Entrez un second prénom: bobette La compatibilité de victor et bobette est de 100.000 %
Et si l'utilisateur indique les prénoms "meredith" et "derek", le programme devrait afficher :
Entrez un premier prénom: meredith Entrez un second prénom: derek La compatibilité de meredith et derek est de 25.000 %
Évaluation
Votre code va être compilé puis testé avec plusieurs valeurs d'entrées différentes pour vérifier qu'il fonctionne bien.
Cependant, prenez déjà l'habitude de tester votre code vous-mêmes car il n'y aura pas INGInious pour le vérifier automatiquement dans l'exercice récapitulatif.
Veuillez aussi suivre les bonnes pratiques suivantes car INGInious ne sait pas les vérifier automatiquement mais elles seront vérifiées dans l'exercice récapitulatif :
- Les noms des variables, constantes, paramètres et fonctions créés sont-ils pertinents ? Correspondent-ils vraiment à ce qu'ils doivent contenir ?
- Est-ce que le code est correctement factorisé ? Est-ce qu'il est possible de déplacer du code en dehors des sélections ou de créer des fonctions pour avoir moins de code dupliqué ?
- Est-ce que les sélections et conditions sont correctement organisées ? Est-ce qu'il est possible de changer l'ordre des sélections ou des conditions pour diminuer leur nombre ?
- Est-ce que toutes les fonctions sont bien spécifiées avec des préconditions et postconditions claires ?
INGInious