Bernd é um estudante do ensino médio que tem alguns problemas em química. Na aula, ele tem que projetar equações químicas para alguns experimentos que estão fazendo, como a combustão de heptano:
C 7 H 16 + 11O 2 → 7CO 2 + 8H 2 O
Como a matemática não é exatamente o assunto mais forte de Bernd, ele costuma ter dificuldade em encontrar as proporções exatas entre os profissionais e os educadores da reação. Como você é o tutor de Bernd, é seu trabalho ajudá-lo! Escreva um programa que calcule a quantidade de cada substância necessária para obter uma equação química válida.
Entrada
A entrada é uma equação química sem quantidades. Para tornar isso possível em ASCII puro, escrevemos quaisquer assinaturas como números comuns. Os nomes dos elementos sempre começam com uma letra maiúscula e podem ser seguidos por um minúsculo. As moléculas são separadas por +
sinais; uma seta da arte ASCII ->
é inserida entre os dois lados da equação:
Al+Fe2O4->Fe+Al2O3
A entrada é finalizada com uma nova linha e não contém espaços. Se a entrada for inválida, seu programa poderá fazer o que quiser.
Você pode supor que a entrada nunca tenha mais que 1024 caracteres. Seu programa pode ler a entrada da entrada padrão, do primeiro argumento ou de uma maneira definida por implementação em tempo de execução, se nada for possível.
Saída
A saída do seu programa é a equação de entrada aumentada com números extras. O número de átomos para cada elemento deve ser o mesmo nos dois lados da seta. Para o exemplo acima, uma saída válida é:
2Al+Fe2O3->2Fe+Al2O3
Se o número de uma molécula for 1, solte-o. Um número deve sempre ser um número inteiro positivo. Seu programa deve gerar números de forma que sua soma seja mínima. Por exemplo, o seguinte é ilegal:
40Al+20Fe2O3->40Fe+20Al2O3
Se não houver solução, imprima
Nope!
em vez de. Uma entrada de amostra que não tem solução é
Pb->Au
Regras
- Isso é código-golfe. O código mais curto vence.
- Seu programa deve terminar em tempo razoável para todas as entradas razoáveis.
Casos de teste
Cada caso de teste possui duas linhas: uma entrada e uma saída correta.
C7H16+O2->CO2+H2O
C7H16+11O2->7CO2+8H2O
Al+Fe2O3->Fe+Al2O3
2Al+Fe2O3->2Fe+Al2O3
Pb->Au
Nope!
solve(
função e eval(
para interpretar a entrada :)