J'ai cette idée qui court dans ma tête, pour générer et évaluer des expressions mathématiques aléatoires. J'ai donc décidé de lui donner un coup de feu et d'élaborer un algorithme, avant de le coder pour le tester.
Exemple:
Voici quelques exemples d'expressions que je souhaite générer de manière aléatoire:
4 + 2 [easy]
3 * 6 - 7 + 2 [medium]
6 * 2 + (5 - 3) * 3 - 8 [hard]
(3 + 4) + 7 * 2 - 1 - 9 [hard]
5 - 2 + 4 * (8 - (5 + 1)) + 9 [harder]
(8 - 1 + 3) * 6 - ((3 + 7) * 2) [harder]
Les plus faciles et les moyens sont assez simples. Les aléatoires int
sont séparés par des opérateurs aléatoires, rien de fou ici. Mais j'ai du mal à démarrer avec quelque chose qui pourrait créer l'un des exemples les plus difficiles et les plus difficiles . Je ne suis même pas sûr qu'un seul algorithme puisse me donner les deux derniers.
Ce que j'envisage:
Je ne peux pas dire que j'ai essayé ces idées, car je ne voulais pas vraiment perdre beaucoup de temps à aller dans une direction qui n'avait aucune chance de travailler en premier lieu. Mais quand même, j'ai pensé à quelques solutions:
- Utiliser des arbres
- Utilisation d'expressions régulières
- Utiliser une folle boucle "for-type" (sûrement la pire)
Ce que je cherche:
Je voudrais savoir quelle est, selon vous, la meilleure solution, entre les solutions que j'ai envisagées et vos propres idées.
Si vous voyez une bonne façon de commencer, j'apprécierais une avance dans la bonne direction, par exemple avec le début de l'algorithme, ou une structure générale de celui-ci.
Notez également que je devrai évaluer ces expressions. Cela peut être fait soit après la génération de l'expression, soit lors de sa création. Si vous prenez cela en considération dans votre réponse, c'est parfait.
Je ne recherche rien de lié à la langue, mais pour mémoire, je pense à l'implémenter dans Objective-C, car c'est la langue avec laquelle je travaille le plus récemment.
Ces exemples n'incluaient pas l' :
opérateur, car je veux seulement manipuler int
s, et cet opérateur ajoute de nombreuses vérifications. Si votre réponse donne une solution pour gérer celle-ci, c'est parfait.
Si ma question nécessite des éclaircissements, veuillez la poser dans les commentaires. Merci de votre aide.