Bernd è uno studente delle superiori che ha dei problemi in chimica. In classe deve progettare equazioni chimiche per alcuni esperimenti che stanno facendo, come la combustione di eptano:
C 7 H 16 + 11O 2 → 7CO 2 + 8H 2 O
Poiché la matematica non è esattamente la materia più forte di Bernd, spesso fa fatica a trovare i rapporti esatti tra i professionisti e gli educatori della reazione. Dato che sei il tutor di Bernd, il tuo compito è aiutarlo! Scrivi un programma che calcoli la quantità di ogni sostanza necessaria per ottenere un'equazione chimica valida.
Ingresso
L'input è un'equazione chimica senza importi. Per renderlo possibile in puro ASCII, scriviamo tutti gli abbonamenti come numeri ordinari. I nomi degli elementi iniziano sempre con una lettera maiuscola e possono essere seguiti da un minuscolo. Le molecole sono separate da +
segni, una freccia di arte ASCII ->
è inserita tra i due lati dell'equazione:
Al+Fe2O4->Fe+Al2O3
L'input termina con una nuova riga e non contiene spazi. Se l'input non è valido, il tuo programma potrebbe fare quello che vuoi.
Si può presumere che l'input non sia mai più lungo di 1024 caratteri. Il tuo programma può leggere l'input dall'input standard, dal primo argomento o in modo definito in fase di esecuzione se nessuno dei due è possibile.
Produzione
L'output del tuo programma è l'equazione di input aumentata con numeri extra. Il numero di atomi per ciascun elemento deve essere lo stesso su entrambi i lati della freccia. Per l'esempio sopra, un output valido è:
2Al+Fe2O3->2Fe+Al2O3
Se il numero per una molecola è 1, rilasciarlo. Un numero deve essere sempre un numero intero positivo. Il tuo programma deve fornire numeri in modo tale che la loro somma sia minima. Ad esempio, quanto segue è illegale:
40Al+20Fe2O3->40Fe+20Al2O3
Se non c'è soluzione, stampare
Nope!
anziché. Un input di esempio che non ha soluzione è
Pb->Au
Regole
- Questo è code-golf. Vince il codice più corto.
- Il programma deve terminare in tempo ragionevole per tutti gli input ragionevoli.
Casi test
Ogni test case ha due righe: un input e un output corretto.
C7H16+O2->CO2+H2O
C7H16+11O2->7CO2+8H2O
Al+Fe2O3->Fe+Al2O3
2Al+Fe2O3->2Fe+Al2O3
Pb->Au
Nope!
solve(
funzione integrata e eval(
per interpretare l'input :)