Nerdle



1.1. Objectif

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 :

  • 3*9+0=27
  • 54/6-8=1

En effet, ces deux formules permettent de déterminer :

  • quels chiffres sont utilisés, puisqu'on passe en revue 0, 1, ..., 9
  • quels opérateurs sont utilisés puisqu'on a utilisé +, -, *, /
  • ou se trouve l'opérateur d'égalité : en position 6 ou 7, voire en position 5 si les positions 6 et 7 ne sont pas validées

1.2. Exemple

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.












1.3. Exemple

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.