Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Chemical Analysis by brownie57
import re
def atoms(formula, limit):
formula = re.sub(r'\((.*)\)(\d)', lambda x: x.group(1) * int(x.group(2)), formula)
formula = re.sub(r'\[(.*)\](\d)', lambda x: x.group(1) * int(x.group(2)), formula)
formula = re.sub(r'([A-Z][a-z]?)(\d)', lambda x: x.group(1) * int(x.group(2)), formula)
atom = set(re.findall(r'[A-Z][a-z]?', formula))
return sorted([x for x in atom if formula.count(x) >= limit])
if __name__ == '__main__':
print("Example:")
print(atoms('C2H5OH', 2))
#These "asserts" using only for self-checking and not necessary for auto-testing
assert atoms('C2H5OH', 2) == ['C', 'H']
assert atoms('H2O', 2) == ['H']
assert atoms('Mg(OH)2', 1) == ['H', 'Mg', 'O']
assert atoms('K4[ON(SO3)2]2', 4) == ['K', 'O', 'S']
print("Coding complete? Click 'Check' to earn cool rewards!")
Dec. 7, 2018