Jack aime le langage de programmation C, mais déteste écrire des expressions comme V=a*b*h;
multiplier les valeurs.
Il aimerait écrire à la V=abh;
place, pourquoi le compilateur devrait-il se plaindre du fait que le abh
symbole n'est pas défini car ils int a, b, h;
sont définis, afin que nous puissions en déduire la multiplication?
Aidez-le à implémenter un analyseur qui déchiffre un seul terme de multiplication, à condition que l'ensemble des variables définies dans la portée actuelle soit connu.
Par souci de simplicité, la multiplication par le nombre (comme dans 2*a*b
) n'est pas prise en compte, seules les variables apparaissent.
L'entrée est un terme de multiplication T , remplissant l'expression rationnelle:
[a-zA-Z_][a-zA-Z_0-9]*
et un ensemble de variables Z .
Une analyse P du terme T sur l'ensemble de variables Z est une chaîne remplissant ce qui suit:
- après avoir supprimé toutes les occurrences de
*
P, nous recevons T, - soit un nom de variable de Z, soit un nom de variable approprié de Z divisé en
*
caractères uniques .
La solution doit imprimer toutes les analyses d'un terme.
Échantillon:
Vars a, c, ab, bc
Term abc
Solution ab*c, a*bc
Vars ab, bc
Term abc
Solution -
Vars -
Term xyz
Solution -
Vars xyz
Term xyz
Solution xyz
Vars width, height
Term widthheight
Solution width*height
Vars width, height
Term widthheightdepth
Solution -
Vars aaa, a
Term aaaa
Solution aaa*a, a*aaa, a*a*a*a
L'entrée (la liste des variables et le terme) peut être fournie de n'importe quelle manière adaptée à la langue.
La sortie peut être sous n'importe quelle forme sensible (une analyse par ligne ou une liste séparée par des virgules, etc.) - mais elle doit être sans ambiguïté et être lisible.
Une sortie vide est acceptable s'il n'y a pas d'analyse possible d'un terme (dans les exemples, j'ai utilisé «-» pour plus de clarté).
C'est un golf de code, donc le code le plus court l'emporte.
a*aaa aaa*a
et nonab*c c*ab
ab*c
c'est une analyse incorrecte, car cec
n'est pas une variable autorisée.