Você deve obter uma sequência de equações químicas (sem espaços, apenas letras (maiúsculas e minúsculas), números, colchetes e sinais matemáticos) do usuário e imprimir a resposta se a equação estiver equilibrada ou não (qualquer par de respostas positivas / negativas : Sim / Não, verdadeiro / falso, 1/0). Para tornar o código mais curto, você pode assumir que as seqüências de entrada podem conter apenas esses elementos: Al, Ar, B, Be, C, Cl, Cr, Cu, Fe, H, He, K, N, O, S. E mais uma coisa : pode haver -
sinais. É tudo sobre matemática: +
significa adição, -
subtração.
Exemplos:
Entrada:
C6H5COOH-O2=7CO2+3H2O
Resultado:
No
Entrada:
2Fe(CN)6+2SO2+202=Fe2(SO4)2+6C2N2
Resultado:
Yes
Entrada:
2SO2=2SO4-2O2
Resultado:
Yes
O código mais curto vence.
2O2
vez de202
(duzentos e dois).Respostas:
Mathematica 152
Resultado:
Trato a fórmula química como um polinômio, por exemplo
Então apenas conto os coeficientes.
fonte
Tr@CoefficientRules
e depois os multiplico por coeficientes comTimes@@@
. ParaO
:2*2+2*2=4*2
paraC
:2*6 = 6*2
, etc.Python 2.7,
316276 caracteresFaz muita reescrita de regex para converter a equação de entrada em algo
eval
capaz. Em seguida, verifica a equação para cada elemento individualmente.Por exemplo, as equações de exemplo reescrevem para (a
t
variável):Tenho certeza de que há mais golfe na parte regex.
fonte
Haskell,
400351308 caracteresIsso pode ter todo o golfe espremido. Não sei se existem outros
100518 caracteres a serem salvos!Aqui está a versão ungolf'd, caso alguém queira acompanhar. É um
Parsec
analisador baseado simples :fonte