Бернд - гімназист, який має деякі проблеми в хімії. У класі він повинен розробити хімічні рівняння для деяких експериментів, які вони роблять, наприклад, спалювання гептану:
З 7 Н 16 + 11O 2 → 7CO 2 + 8H 2 O
Оскільки математика не є найсильнішим предметом Бернда, йому часто важко знайти точні співвідношення між про- та вихованцями реакції. Оскільки ви вихователь Бернда, ваша робота допомогти йому! Напишіть програму, яка обчислює кількість кожної речовини, необхідної для отримання дійсного хімічного рівняння.
Вхідні дані
Вхід - хімічне рівняння без сум. Щоб зробити це можливим у чистому ASCII, ми пишемо будь-які підписки як звичайні номери. Імена елементів завжди починаються з великої літери і може супроводжуватися мінусом. Молекули розділені +
знаками, ->
між обома сторонами рівняння вставлена стрілка ASCII :
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(
інтерпретувати вхід :)