fork download
  1. from math import log10
  2. from sys import stdin
  3.  
  4. def parse(s):
  5. m = {}
  6. e = ''
  7. n = 0
  8. while len(s) > 0:
  9. ch = s.pop()
  10. if ch.isdigit():
  11. x = int(ch)
  12. if n > 0:
  13. y = log10(n)
  14. while log10(x) <= y: x *= 10
  15. n += x
  16. elif ch == '(': return m
  17. elif ch == ')':
  18. t = parse(s)
  19. for k,v in t.items():
  20. if not k in m: m[k] = 0
  21. m[k] += v * n
  22. n = 0
  23. else:
  24. if n == 0: n = 1
  25. e = ch+e
  26. if ch.isupper():
  27. if not e in m: m[e] = n
  28. else: m[e] += n
  29. n = 0
  30. e = ''
  31. return m
  32.  
  33. if __name__ == '__main__':
  34. for line in map(lambda s: s.strip(), stdin):
  35. print(line)
  36. m = parse(list(line))
  37. for k,v in sorted(m.items()):
  38. print('{}: {}'.format(k,v))
  39. print('')
Success #stdin #stdout 0.01s 23288KB
stdin
C6H12O6 
CCl2F2
NaHCO3
C4H8(OH)2
PbCl(NH3)2(COOH)2
stdout
C6H12O6
C: 6
H: 12
O: 6

CCl2F2
C: 1
Cl: 2
F: 2

NaHCO3
C: 1
H: 1
Na: 1
O: 3

C4H8(OH)2
C: 4
H: 10
O: 2

PbCl(NH3)2(COOH)2
C: 2
Cl: 1
H: 8
N: 2
O: 4
Pb: 1