Sie sollten vom Benutzer eine Reihe chemischer Gleichungen (keine Leerzeichen, nur Buchstaben (Groß- und Kleinbuchstaben), Zahlen, Klammern und mathematische Zeichen) erhalten und die Antwort ausdrucken, ob die Gleichung ausgeglichen ist oder nicht (ein Paar positiver / negativer Antworten) : Ja / Nein, wahr / falsch, 1/0). Um den Code zu verkürzen, können Sie davon ausgehen, dass Eingabezeichenfolgen nur die folgenden Elemente enthalten können: Al, Ar, B, Be, C, Cl, Cr, Cu, Fe, H, He, K, N, O, S. Und noch etwas : Es könnte -
Anzeichen geben. Alles dreht sich um Mathematik: +
bedeutet Addition, -
bedeutet Subtraktion.
Beispiele:
Eingang:
C6H5COOH-O2=7CO2+3H2O
Ausgabe:
No
Eingang:
2Fe(CN)6+2SO2+202=Fe2(SO4)2+6C2N2
Ausgabe:
Yes
Eingang:
2SO2=2SO4-2O2
Ausgabe:
Yes
Der kürzeste Code gewinnt.
2O2
statt202
(zweihundertzwei) tippen .Antworten:
Mathematica 152
Ergebnis:
Ich behandle die chemische Formel als Polynom, z
Dann zähle ich einfach die Koeffizienten.
quelle
Tr@CoefficientRules
und multipliziere sie dann mit Koeffizienten mitTimes@@@
. FürO
:2*2+2*2=4*2
, fürC
:2*6 = 6*2
usw.Python 2.7,
316276 ZeichenEs wird viel Regex-Rewriting durchgeführt, um die Eingabegleichung in etwas fähiges umzuwandeln
eval
. Anschließend wird die Gleichung für jedes Element einzeln überprüft.Zum Beispiel werden die Beispielgleichungen in (die
t
Variable) umgeschrieben :Ich bin sicher, es gibt mehr Golf auf dem Regex-Teil.
quelle
Haskell,
400351308 ZeichenDies könnte den ganzen Golf herausgequetscht haben. Ich weiß nicht, ob noch
100518 Zeichen gespeichert werden müssen!Hier ist die ungolf'd Version, falls jemand mitmachen möchte. Es ist ein einfacher
Parsec
basierter Parser:quelle