Bernd es un estudiante de secundaria que tiene algunos problemas en química. En clase tiene que diseñar ecuaciones químicas para algunos experimentos que están haciendo, como la combustión de heptano:
C 7 H 16 + 11O 2 → 7CO 2 + 8H 2 O
Como las matemáticas no son exactamente la asignatura más sólida de Bernd, a menudo le resulta difícil encontrar las proporciones exactas entre los pro- y eductos de la reacción. Como eres el tutor de Bernd, ¡es tu trabajo ayudarlo! Escriba un programa que calcule la cantidad de cada sustancia necesaria para obtener una ecuación química válida.
Entrada
La entrada es una ecuación química sin cantidades. Para hacer esto posible en ASCII puro, escribimos cualquier suscripción como números ordinarios. Los nombres de los elementos siempre comienzan con una letra mayúscula y pueden ir seguidos de una minúscula. Las moléculas se separan con +
signos, ->
se inserta una flecha ASCII-art entre ambos lados de la ecuación:
Al+Fe2O4->Fe+Al2O3
La entrada se termina con una nueva línea y no contendrá espacios. Si la entrada no es válida, su programa puede hacer lo que quiera.
Puede suponer que la entrada nunca tiene más de 1024 caracteres. Su programa puede leer la entrada desde la entrada estándar, desde el primer argumento o de una manera definida por la implementación en tiempo de ejecución si ninguno es posible.
Salida
La salida de su programa es la ecuación de entrada aumentada con números adicionales. El número de átomos para cada elemento debe ser el mismo en ambos lados de la flecha. Para el ejemplo anterior, una salida válida es:
2Al+Fe2O3->2Fe+Al2O3
Si el número de una molécula es 1, suéltelo. Un número siempre debe ser un entero positivo. Su programa debe producir números tales que su suma sea mínima Por ejemplo, lo siguiente es ilegal:
40Al+20Fe2O3->40Fe+20Al2O3
Si no hay solución, imprima
Nope!
en lugar. Una entrada de muestra que no tiene solución es
Pb->Au
Reglas
- Este es el código de golf. El código más corto gana.
- Su programa debe finalizar en un tiempo razonable para todas las entradas razonables.
Casos de prueba
Cada caso de prueba tiene dos líneas: una entrada y una salida correcta.
C7H16+O2->CO2+H2O
C7H16+11O2->7CO2+8H2O
Al+Fe2O3->Fe+Al2O3
2Al+Fe2O3->2Fe+Al2O3
Pb->Au
Nope!
solve(
función incorporada e eval(
interpretando la entrada :)