A Jack le gusta el lenguaje de programación C, pero odia escribir expresiones como V=a*b*h;
multiplicar los valores.
En su V=abh;lugar, le gustaría escribir , ¿por qué el compilador debe gemir acerca de que el abhsímbolo no está definido ya que int a, b, h;están definidos, para que podamos deducir la multiplicación?
Ayúdelo a implementar un analizador que descifre un solo término de multiplicación, siempre que se conozca el conjunto de variables definidas en el alcance actual.
Por simplicidad, la multiplicación por número (como en 2*a*b) no se tiene en cuenta, solo aparecen las variables.
La entrada es un término de multiplicación T , que cumple la expresión regular:
[a-zA-Z_][a-zA-Z_0-9]*
y un conjunto variable de Z .
Un análisis P del término T sobre el conjunto variable Z es una cadena que cumple lo siguiente:
- después de eliminar todas las ocurrencias de
*P, recibimos T, - es un nombre de variable de Z o consta de nombres de variable apropiados de Z divididos por
*caracteres individuales .
La solución debe imprimir todos los análisis de un término.
Muestra:
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
La entrada (la lista de variables y el término) se puede proporcionar de cualquier manera adecuada para el idioma.
La salida puede estar en cualquier forma sensata (un análisis por línea o una lista separada por comas, etc.), pero debe ser inequívoca y posible de leer.
La salida vacía es aceptable si no hay un posible análisis de un término (en los ejemplos usé '-' para mayor claridad).
Este es un código de golf, por lo que gana el código más corto.
a*aaa aaa*ay noab*c c*ab
ab*ces un análisis incorrecto, yacque no es una variable permitida.