Bernd jest uczniem szkoły średniej, który ma pewne problemy z chemią. W klasie musi zaprojektować równania chemiczne dla niektórych przeprowadzanych eksperymentów, takich jak spalanie heptanu:
C 7 H 16 + 11o 2 → 7CO 2 + 8H 2 O
Ponieważ matematyka nie jest najsilniejszym przedmiotem Bernda, często ma trudności ze znalezieniem dokładnych proporcji między pro- i eduktami reakcji. Ponieważ jesteś wychowawcą Bernda, Twoim zadaniem jest mu pomóc! Napisz program, który oblicza ilość każdej substancji potrzebną do uzyskania prawidłowego równania chemicznego.
Wkład
Dane wejściowe to równanie chemiczne bez ilości. Aby było to możliwe w czystym ASCII, zapisujemy wszelkie subskrypcje jako zwykłe liczby. Nazwy elementów zawsze zaczynają się od dużej litery, a po nich może być mała. Cząsteczki są oddzielone +
znakami, po ->
obu stronach równania wstawiona jest strzałka ASCII-art :
Al+Fe2O4->Fe+Al2O3
Wejście jest zakończone znakiem nowej linii i nie będzie zawierało spacji. Jeśli dane wejściowe są niepoprawne, twój program może zrobić co chcesz.
Można założyć, że dane wejściowe nigdy nie przekraczają 1024 znaków. Twój program może albo odczytać dane wejściowe ze standardowego wejścia, z pierwszego argumentu lub w sposób zdefiniowany w implementacji w czasie wykonywania, jeśli żadne z nich nie jest możliwe.
Wydajność
Dane wyjściowe Twojego programu to równanie wejściowe powiększone o dodatkowe liczby. Liczba atomów dla każdego elementu musi być taka sama po obu stronach strzałki. W powyższym przykładzie poprawnym wynikiem jest:
2Al+Fe2O3->2Fe+Al2O3
Jeśli liczba cząsteczki wynosi 1, upuść ją. Liczba musi zawsze być dodatnią liczbą całkowitą. Twój program musi podawać liczby tak, aby ich suma była minimalna. Na przykład następujące działania są nielegalne:
40Al+20Fe2O3->40Fe+20Al2O3
Jeśli nie ma rozwiązania, wydrukuj
Nope!
zamiast. Przykładowe dane wejściowe, które nie mają rozwiązania, to
Pb->Au
Zasady
- To jest golf golfowy. Najkrótszy kod wygrywa.
- Twój program musi zakończyć się w rozsądnym terminie dla wszystkich uzasadnionych danych wejściowych.
Przypadki testowe
Każdy przypadek testowy ma dwa wiersze: dane wejściowe i prawidłowe dane wyjściowe.
C7H16+O2->CO2+H2O
C7H16+11O2->7CO2+8H2O
Al+Fe2O3->Fe+Al2O3
2Al+Fe2O3->2Fe+Al2O3
Pb->Au
Nope!
solve(
funkcji i eval(
interpretując dane wejściowe :)