Vous devez obtenir une chaîne d'équation chimique (pas d'espaces, uniquement des lettres (majuscules et minuscules), des chiffres, des crochets et des signes mathématiques) de l'utilisateur et imprimer la réponse si l'équation est équilibrée ou non (toute paire de réponses positives / négatives : Oui / Non, vrai / faux, 1/0). Pour raccourcir le code, vous pouvez supposer que les chaînes d'entrée ne peuvent contenir que ces éléments: Al, Ar, B, Be, C, Cl, Cr, Cu, Fe, H, He, K, N, O, S. Et encore une chose : il pourrait y avoir des -
signes. Tout est question de mathématiques: +
signifie addition, -
signifie soustraction.
Exemples:
Contribution:
C6H5COOH-O2=7CO2+3H2O
Production:
No
Contribution:
2Fe(CN)6+2SO2+202=Fe2(SO4)2+6C2N2
Production:
Yes
Contribution:
2SO2=2SO4-2O2
Production:
Yes
Le code le plus court gagne.
2O2
au lieu de202
(deux cent deux).Réponses:
Mathematica 152
Résultat:
Je traite la formule chimique comme un polynôme, par exemple
Ensuite, je compte juste les coefficients.
la source
Tr@CoefficientRules
puis je les multiplie par des coefficients avecTimes@@@
. PourO
:2*2+2*2=4*2
pourC
:2*6 = 6*2
, etc.Python 2.7,
316276 caractèresIl fait beaucoup de réécriture regex pour convertir l'équation d'entrée en quelque chose de
eval
capable. Il vérifie ensuite l'équation pour chaque élément individuellement.Par exemple, les équations d'exemple réécrivent dans (la
t
variable):Je suis sûr qu'il y a plus de golf sur la partie regex.
la source
Haskell,
400351308 caractèresCela pourrait avoir tout le golf hors de lui. Je ne sais pas s'il y a encore
100518 caractères à sauver!Voici la version non golfée, au cas où quelqu'un voudrait suivre. Il s'agit d'un
Parsec
analyseur basé simple :la source