Бернд - ученик средней школы, у которого есть проблемы с химией. В классе он должен разработать химические уравнения для некоторых экспериментов, которые они проводят, таких как сжигание гептана:
C 7 H 16 + 11O 2 → 7CO 2 + 8H 2 O
Поскольку математика не является самым сильным предметом Бернда, ему часто бывает трудно найти точные соотношения между продуктами и продуктами реакции. Поскольку вы наставник Бернда, ваша работа - помочь ему! Напишите программу, которая рассчитывает количество каждого вещества, необходимое для получения правильного химического уравнения.
вход
Ввод представляет собой химическое уравнение без количеств. Чтобы сделать это возможным в чистом ASCII, мы пишем любые подписки как обычные числа. Имена элементов всегда начинаются с заглавной буквы и могут сопровождаться крошечной. Молекулы разделены +
знаками, стрелка ASCII-art ->
вставлена между обеими сторонами уравнения:
Al+Fe2O4->Fe+Al2O3
Ввод завершается новой строкой и не содержит пробелов. Если ввод неверен, ваша программа может делать все что угодно.
Вы можете предположить, что ввод никогда не будет длиннее 1024 символов. Ваша программа может либо прочитать входные данные из стандартного ввода, из первого аргумента, либо заданным реализацией способом во время выполнения, если это невозможно.
Выход
Результатом вашей программы является входное уравнение, дополненное дополнительными числами. Количество атомов для каждого элемента должно быть одинаковым с обеих сторон стрелки. Для приведенного выше примера допустимый вывод:
2Al+Fe2O3->2Fe+Al2O3
Если число для молекулы - 1, отбросьте это. Число всегда должно быть положительным целым числом. Ваша программа должна выдавать числа такие, чтобы их сумма была минимальной. Например, следующее недопустимо:
40Al+20Fe2O3->40Fe+20Al2O3
Если решения не существует, распечатайте
Nope!
вместо. Пример ввода, который не имеет решения
Pb->Au
правила
- Это код-гольф. Самый короткий код выигрывает.
- Ваша программа должна завершиться в разумные сроки для всех разумных вводов.
Тестовые случаи
Каждый тестовый пример имеет две строки: вход и правильный выход.
C7H16+O2->CO2+H2O
C7H16+11O2->7CO2+8H2O
Al+Fe2O3->Fe+Al2O3
2Al+Fe2O3->2Fe+Al2O3
Pb->Au
Nope!
solve(
функцию и eval(
интерпретацию входных данных :)