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.
ab*c
c'est une analyse incorrecte, car cec
n'est pas une variable autorisée.a*aaa aaa*a
et nonab*c c*ab
Réponses:
Pyth, 18 caractères
Cette solution est adaptée de ma solution Interpreting Fish . Les problèmes sont en fait très similaires.
Attend une entrée en tant que telle:
Donne une sortie comme ceci:
Essayez-le ici.
sm^Qkhlz
: Génère toutes les séquences de variables contenant jusqu'à la longueur du nombre de chaînes d'entrée de variables.fqzsT
: Filtre les séquences variables qui correspondent à la chaîne d'entréemj\*d
: Insère le*
symbole et imprime.la source
Python 2 -
14794 octetsCela définit une fonction
R
à utiliser comme:Imprime la sortie comme:
la source
JavaScript (ES6) 111
Adapté de ma réponse «poisson» , la principale différence est de trouver toutes les solutions, pas seulement la première.
La sortie est imprimée sur la console. Le résultat de la fonction n'a aucune signification et doit être ignoré.
Tester dans la console Firefox / FireBug
la source