/// <summary> /// Calculate the complexity in the supplied <see cref="IAtomContainer"/>. /// </summary> /// <returns>the complexity</returns> public Result Calculate(IAtomContainer container) { container = (IAtomContainer)container.Clone(); int a = 0; double h = 0; foreach (var atom in container.Atoms) { switch (atom.AtomicNumber) { default: h++; goto case AtomicNumbers.C; case AtomicNumbers.C: a++; goto case AtomicNumbers.H; case AtomicNumbers.H: break; } } var b = container.Bonds.Count + AtomContainerManipulator.GetImplicitHydrogenCount(container); var c = Math.Abs(b * b - a * a + a) + (h / 100); return(new Result(c)); }