Rapport cryptarithm 1.0
Dev-linux
|
On nous fournit:
N
(2 ≤ N ≤ 5
), qui représente le nombre de mots à additionner;N
chaînes de caractères mots
, chacune représentant un mot à additionner;totalStr
représentant le total de l’addition des mots précédents.Pour résoudre ce problème, il faut écrire un programme en C qui résout un cryptarithme, c'est-à-dire une équation dans laquelle les chiffres ont été remplacés par des lettres. Dans ce problème, chaque cryptarithme est une addition entre plusieurs mots. Le programme devra trouver et afficher l’unique correspondance entre chaque lettre et un chiffre (de 0 à 9). Il faut donc analyser et attribuer un chiffre à chaque lettre, en respectant les règles suivantes :
Ce programme devra donc trouver la correspondance correcte entre les lettres et les chiffres afin de satisfaire l’équation du cryptarithme.
On doit retourner toutes les lettres ainsi que leur valeur respective. L'affichage se fait ligne après ligne avec une lettre et son chiffre correspondant par ligne.
J'analyse d'abord les données en identifiant les éléments clés du problème : les mots à additionner, ainsi que le mot total. Ensuite, j'extrais toutes les lettres distinctes présentes dans ces mots et les as organisées pour faciliter leur traitement. Ensuite, pour attribuer un chiffre à chaque lettre, j'explore différentes combinaisons possibles en générant des affectations de chiffres aux lettres tout en respectant les contraintes du problème. Cette exploration s’est faite de manière systématique afin de tester chaque possibilité. À chaque étape, je vérifie si l’association des lettres aux chiffres donnait une addition correcte. Dès qu’une configuration valide a été trouvée, j'affiche le résultat en respectant l’ordre alphabétique des lettres.
Tout d'abord, mon programme commence par récupérer le nombre de mots à additionner ainsi que les mots eux-mêmes, suivis du mot représentant le total attendu. Il parcourt tous les mots et identifie quelles lettres sont présentes dans l’équation, ensuite, il trie ces lettres par ordre alphabétique afin de garantir un affichage structuré. Il faut ensuite que le programme génére les différentes permutations, pour cela le programme cherche toutes les façons possibles d’attribuer un chiffre (de 0 à 9) à chaque lettre unique. Il utilise une approche récursive qui explore toutes les combinaisons valides tout en respectant les contraintes du problème (par exemple, une lettre en début de mot ne peut pas être associée à 0). Une fois une possibilité déterminé, il faut vérifier si cette solution fonctionne, donc, pour chaque permutation générée, il convertit les mots en nombres en remplaçant les lettres par leurs chiffres associés. Une fois les mots convertient, le programme effectue l’addition des N
mots et vérifie si la somme obtenue correspond bien au total donné dans l’entrée. Pour finir, lorsqu’une permutation valide est trouvée, il affiche chaque lettre suivie du chiffre qui lui est associé, en respectant l’ordre alphabétique.
Ce programme extrait directement les lettres uniques lors de la lecture des mots, alors que ton programme les rassemble après coup. Il trie ces lettres avec qsort
, tout comme toi. Pour attribuer des chiffres, il utilise une affectation récursive qui évite 0 pour les lettres initiales dès le départ, tandis que toi, tu vérifies cela pendant les permutations. Il reconstruit les valeurs numériques des mots avec atoi
, ce qui est plus direct que ton approche basée sur la multiplication progressive. Enfin, il s’arrête immédiatement (exit(0)
) dès qu’une solution valide est trouvée, alors que ton programme teste toutes les permutations avant d'afficher la solution. Cela le rend potentiellement plus rapide dans certaines configurations.
Vous trouverez ici la page de téléchargement des fichiers concernant le rapport cryptarithm.