Powinieneś otrzymać ciąg równania chemicznego (bez spacji, tylko litery (wielkie i małe), cyfry, nawiasy i znaki matematyczne) od użytkownika i wydrukować odpowiedź, jeśli równanie jest zrównoważone, czy nie (dowolna para odpowiedzi pozytywnych / negatywnych : Tak / Nie, prawda / fałsz, 1/0). Aby skrócić kod, możesz założyć, że ciągi wejściowe mogą zawierać tylko te elementy: Al, Ar, B, Be, C, Cl, Cr, Cu, Fe, H, He, K, N, O, S. I jeszcze jedno : mogą być -
znaki. Chodzi o matematykę: +
oznacza dodawanie, -
oznacza odejmowanie.
Przykłady:
Wejście:
C6H5COOH-O2=7CO2+3H2O
Wynik:
No
Wejście:
2Fe(CN)6+2SO2+202=Fe2(SO4)2+6C2N2
Wynik:
Yes
Wejście:
2SO2=2SO4-2O2
Wynik:
Yes
Najkrótszy kod wygrywa.
2O2
zamiast202
(dwieście dwa).Odpowiedzi:
Mathematica 152
Wynik:
Traktuję wzór chemiczny jako wielomian, np
Następnie liczę tylko współczynniki.
źródło
Tr@CoefficientRules
a następnie mnożę je przez współczynniki zTimes@@@
. ZaO
:,2*2+2*2=4*2
zaC
:2*6 = 6*2
itpPython 2.7,
316276 znakówWiele przekształca wyrażenia regularne, aby przekształcić równanie wejściowe w coś
eval
zdolnego. Następnie sprawdza równanie dla każdego elementu osobno.Na przykład przykładowe równania przepisują na (
t
zmienną):Jestem pewien, że w regexie będzie więcej golfa.
źródło
Haskell,
400351308 znakówTo mogło po prostu wycisnąć z niego wszystkie golfa. Nie wiem, czy jest jeszcze
10051trzeba zapisać 8 znaków!Oto wersja bez golfa, na wypadek gdyby ktoś chciał pójść za nią. Jest to prosty
Parsec
parser oparty:źródło