Cryptarithmes, solution additions cryptées

Soyez le premier à donner votre avis sur cette source.

Vue 11 187 fois - Téléchargée 630 fois

Description

Il s'agit d'un petit devoir de vacances, un programme complet, et non la résolution d'une difficulté de programmation ( niveau débutant): additions cryptées.

L'intérêt de ce programme est qu'il résout les problèmes de cryptarithmie, sans être trop pressé car la méthode utilisée est la force brute (énumération). La définition des cryptarithmes est donnée dans le fichier 'définition.txt' dans le zip. Des énoncés de problèmes sont aussi fournis ( ils présentent aussi des exemples de règles d'écriture ).

La règle d'écriture des énoncés est la suivante:
La ligne contenant le premier mot doit commencer par un espace.
Chaque mot nouveau doit être sur une nouvelle ligne, commençant par un '+'
La ligne de tirets est optionnelle pour la lisibilité.
La ligne de résultat est une nouvelle ligne commençant par '='

Conclusion :


Le programme commence par analyser le nombre de lettres différentes ( pas plus de 26 ); puis il vérifie si la valeur attribuée peut commencer à 0 ou à 1 ( valeur de 'premier').

Ensuite un compteur est attribué à chaque lettre, et l'ensemble des compteurs fonctionne comme les roues d'un compteur kilométrique: quand un compteur à fait un tour, il incrémente le compteur suivant... et ainsi de suite jusqu'a ce que le dernier compteur atteigne 9.

Si le problème admet des centaines de solutions, il est souhaitable d'arrêter avant la fin, d'où la présence d'un test d'arrêt. Pour stopper le programme, il est possible de mettre le test à 0.

Pour vérifier que le programme n'est pas arrété, une petite procédure d'affichage d'étoiles montre le progression en mode texte. Une ligne d'affichage montre le test de codage du dernier compteur ( pour suivre l'avance de l'analyse ). Jusqu à 8 lettres différentes, le traitement est assez rapide; ensuite...

Pour moi, le code est suffisamment commenté. J'ai ajouté beaucoup de variables inutiles, et je n'ai pas utilisé de syntaxe du genre 'With' pour suivre les variables en cas de débuggage, et simplifier la lisiblité. Je pense que le code est assez simple pour être compilé dans de nombreuses versions de DELPHI.

On pourrait rendre l'écriture du code plus élégante, plus compacte, avec plus de contrôles sur les différents types d'erreurs, mais ce n'était pas mon but. Je laisse le soin aux graphistes d'enjoliver l'interface pour en faire un produit fini si le programme présente un intérêt.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
40
Date d'inscription
jeudi 8 avril 2004
Statut
Membre
Dernière intervention
25 juillet 2014

Il y a une solution hyper rapide à cette adresse, mais pas le source :
http://www.fafa.teaser-hosting.com/crypta.php
Bravo quand même pour ta solution.
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
SIX + HUIT = SEPT !
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

J'aime bien l'idée :)

Par contre, comme je le pensais, le programme monopolise les ressources tant qu'il tourne.
En ajoutant un petit "Application.ProcessMessage" dans la boucle principale, ça resoudrait peut être le problème.

Le code est bien écrit aussi, ça joue en ta faveur, je te mets un 8/10.
De mon côté je vais chercher une solution plus rapide (si c'est possible ^^)
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
ROUE + ROUE = VELO
TOI + MOI = ZERO
etc..

cà donne quoi FOXI + CIREC = ?
ou CARIBENSILA + MAURICIO = ?

je sens qu'on va s'amuser un peu..
je mets 6/10.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.