不饱和度
这并不是一个特别困难的代码难题-但我很想看到您解决问题的多种方式。
不饱和度是原子之间的双化学键的数目和/或化合物中的环数。
您将以XaYbZc的形式得到化合物的分子式(其中a,b和c是化合物中X,Y或Z的原子数)-分子式可以是任何长度,并且可以包含任何化学元素在元素周期表中(尽管C,H,N,F,Cl,Br以外的元素,我可能会被忽略,因为它们不在公式中显示)。该化合物将包含至少一个碳原子。您必须计算并显示其不饱和度。
例如,化合物苯(如下图所示)的DoU为4,因为它具有三个双键(由原子之间的双线表示)和一个单环(成环连接的多个原子):
根据LibreTexts的定义:
DoU =(2C + 2 + N-X-H)/ 2
哪里:
C
是碳原子数N
是氮原子数X
是卤素原子的数量(F
,Cl
,Br
,I
)H
是氢原子数
测试用例:
C6H6 --> 4
C9H2O1 --> 0
C9H9N1O4 --> 6
U1Pt1 --> Not a valid input, no carbon
Na2O1 --> Not a valid input, no carbon
C1H1 --> 1.5, although in practice this would be one, but is a part of a compound rather than a compound in entirety.
N1H3 would return 0 - though in practice it isn't an organic compound (in other words it contains no carbon) so the formula wouldn't apply and it isn't a valid input
有关CH的说明,请参见此处
本质上,您必须确定化合物中是否存在上述任何元素(C,H,N,F,Cl,Br,I),如果存在,则为多少。然后,使用以上公式计算不饱和度。
对于DoU公式,只有C,H,N,F,Cl,Br和I是有效输入。为了解决这个难题,可以完全忽略其他任何元素(例如,如果化合物为C6H6Mn,则结果仍为4)。如果没有上述化合物,答案将为零。
您可以假定所有输入的化合物在化学上都是可能的,至少包含一个碳原子,并且已知存在。如果输入无效,则程序可能输出0或-1,或者不产生结果。
规则
适用标准IO规则和漏洞。输入必须是标准字符串,并且您可以假定输入不会为空。这是codegolf-以字节为单位的最短代码为准。
C9H2O1 --> 0
。不应该是9吗?(2*9+2+0-0-2)/2
Na2O
和亚甲基:CH
和CCl4He
。这些都是极端情况,可能会打破一些解决方案。顺便说一句,这对Mathematica以外的任何人都没有关系(可能),但是我们可以假设化合物(可以)存在吗?