Bernd ist ein Gymnasiast, der Probleme mit der Chemie hat. In der Klasse muss er chemische Gleichungen für einige Experimente entwerfen, die sie durchführen, wie zum Beispiel die Verbrennung von Heptan:
C 7 H 16 + 11 O 2 → 7 CO 2 + 8 H 2 O
Da Mathematik nicht gerade das stärkste Fach von Bernd ist, fällt es ihm oft schwer, die genauen Verhältnisse zwischen Pro- und Edukten der Reaktion zu finden. Da Sie Bernd's Tutor sind, ist es Ihre Aufgabe, ihm zu helfen! Schreiben Sie ein Programm, das die Menge jeder Substanz berechnet, die benötigt wird, um eine gültige chemische Gleichung zu erhalten.
Eingang
Die Eingabe ist eine chemische Gleichung ohne Mengen. Um dies in reinem ASCII zu ermöglichen, schreiben wir alle Abonnements als normale Zahlen. Elementnamen beginnen immer mit einem Großbuchstaben und können von einem Minuszeichen gefolgt werden. Die Moleküle werden mit +
Vorzeichen getrennt , ein ASCII-Pfeil ->
wird zwischen beide Seiten der Gleichung eingefügt:
Al+Fe2O4->Fe+Al2O3
Die Eingabe wird mit einem Zeilenumbruch abgeschlossen und enthält keine Leerzeichen. Wenn die Eingabe ungültig ist, kann Ihr Programm tun, was Sie möchten.
Sie können davon ausgehen, dass die Eingabe niemals länger als 1024 Zeichen ist. Ihr Programm kann entweder die Eingabe von der Standardeingabe, vom ersten Argument oder auf eine durch die Implementierung definierte Weise zur Laufzeit lesen, wenn beides nicht möglich ist.
Ausgabe
Die Ausgabe Ihres Programms ist die Eingabegleichung, die mit zusätzlichen Zahlen ergänzt wird. Die Anzahl der Atome für jedes Element muss auf beiden Seiten des Pfeils gleich sein. Für das obige Beispiel ist eine gültige Ausgabe:
2Al+Fe2O3->2Fe+Al2O3
Wenn die Zahl für ein Molekül 1 ist, lassen Sie es fallen. Eine Zahl muss immer eine positive ganze Zahl sein. Ihr Programm muss Zahlen liefern, deren Summe minimal ist. Zum Beispiel ist Folgendes illegal:
40Al+20Fe2O3->40Fe+20Al2O3
Wenn es keine Lösung gibt, drucken Sie
Nope!
stattdessen. Eine Beispieleingabe, die keine Lösung hat, ist
Pb->Au
Regeln
- Das ist Code-Golf. Der kürzeste Code gewinnt.
- Ihr Programm muss für alle angemessenen Eingaben in angemessener Zeit beendet werden.
Testfälle
Jeder Testfall hat zwei Zeilen: Eine Eingabe und eine korrekte Ausgabe.
C7H16+O2->CO2+H2O
C7H16+11O2->7CO2+8H2O
Al+Fe2O3->Fe+Al2O3
2Al+Fe2O3->2Fe+Al2O3
Pb->Au
Nope!
solve(
Funktion verwendet und eval(
die Eingabe interpretiert habe :)