Question

J'ai créé un programme utilisant dev-cpp et wxwidgets qui résout un casse-tête.
L'utilisateur doit remplir les blocs d'opérations et les blocs de résultats et le programme le résoudra.
En le résolvant en utilisant bruteforce, je génère toutes les combinaisons de nombres de 9 longueurs non répétées en utilisant un algorithme récursif. Il le fait assez vite.
Jusque là tout va bien!
Mais le problème est que mon programme fonctionne en fonction du personnage sur les blocs. Il est extrêmement lent (il n’obtient jamais de réponse), à ??cause de la comparaison des caractères avec +, -, *, etc. Je fais une affaire.
Existe-t-il un moyen ou un langage de programmation permettant la création dynamique d’opérateurs? Je peux donc définir l'opérateur ROW1COL2 comme étant un +, et de la même manière pour toutes les autres opérations.
Je laisse une capture d'écran de l'application, il est donc plus facile de comprendre comment fonctionne le puzzle.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


PD: L'algorithme fonctionne, je l'ai essayé avec un casse-tête trivial et je l'ai résolu en une seconde.

Était-ce utile?

La solution

Vous n’êtes pas sûr que c’est vraiment ce que vous cherchez, mais ..
Tout langage orienté objet, tel que C ++ ou C #, vous permettra de créer un "Opérateur". classe de base puis dériver de cette classe de base un "PlusOperator" ou " MinusOperator " etc'. c'est le moyen standard d'éviter de tels cas.

Cependant, je ne suis pas sûr que cela résoudra votre problème de performances.
L'utilisation de la force brutale simple pour un tel problème vous résultera en une solution exponentielle. cela semblera fonctionner rapidement pour une petite contribution - disons compléter tous les chiffres. Mais si vous voulez terminer les opérations, c'est un problème beaucoup plus vaste avec beaucoup plus de possibilités.
Il est donc probable que même sans CASE, votre programme ne pourra pas le résoudre.

Pour tenter de résoudre ce type de problèmes, utilisez des méthodes de recherche avancées qui utilisent une fonction heuristique. Voir, par exemple, l'algorithme A * (étoile) .

Bonne chance!

Autres conseils

Vous pouvez représenter les nombres et les opérateurs sous forme d'objets. L'analyse ne s'effectue donc qu'une fois au début de la résolution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top