Le jeu Nerdle consiste à résoudre un casse-tête basé sur des nombres.
On désire offrir au joueur, un assistant, qui va lui donner, en fonction :
l'ensemble des formules valides.
Pour gagner en jouant à Nerdle il suffit de commencer par saisir les formules suivantes :
En effet, ces deux formules permettent de déterminer :
Dans le formulaire qui suit, la formule de calcul est donnée et commence par le chiffre 3. Les opérateurs doivent être spécifiés et la formule contient un signe '='.
Les points '.' représentent des chiffres qu'il faudra remplacer par les chiffres autorisés.
Attention avec les formules contenant des divisions car Javascript utilise la division réelle, donc $9/2 =4,5$ et non pas $4$. Il est donc nécessaire de tronquer le résultat (Math.trunc) si on veut une division qui s'apparente à une division entière.
Le but du projet consiste à écrire un programme C/C++ qui lit une expression comme présenté ci-dessus et la représente sous forme d'arbre afin de pouvoir l'interpréter par la suite.
On pourrait utiliser une structure d'arbre afin de représenter l'expression ainsi qu'un analyseur lexical et un analyseur syntaxique afin de l'analyser. Cependant, ce sont des techniques qui ne sont pas d'un niveau L1.
On propose donc afin d'évaluer l'expression une fois instanciée, de faire un appel système à la commande bc (An arbitrary precision calculator language, voir man bc) que l'on peut utiliser de deux manières différentes :
richer@zentopia\$ echo "1+2==3" | bc
1
richer@zentopia\$ bc <<< "1+2==4"
0
Pour ce faire on utilisera une la fonction de la librairie C appelée popen afin d'exécuter la commande mais également de récupérer sa sortie.
Le programme devra donc prendre en paramètres deux chaînes de caractères :
Concevoir une méthode de résolution en se basant sur un traitement récursif qui consistera à instancier tous les '.' de la formule par un chiffre, puis à évaluer l'expression. Si celle-ci est vraie alors on l'affichera.
Pour la période de 17 au 21 avril 2023 :