fork download
  1. def countElements(formula) {
  2. def els = [:]
  3. def molecules = formula =~ /\(?([^\(\)]+)\)?(\d*)/
  4. molecules.each{ molecule ->
  5. def elements = molecule[1] =~ /([A-Z][a-z]*)(\d*)/
  6. elements.each{ element ->
  7. els[element[1]] = (els[element[1]]?:0) + ((element[2]?:'1') as int) * ((molecule[2]?:'1') as int)
  8. }
  9. }
  10. return els.sort()
  11. }
  12. System.in.readLines().each{println "$it\n${countElements(it)}\n"}
Success #stdin #stdout 1.04s 4456448KB
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]