(我不是化学家!我可能在某些方面写错了,我正在写我在高中学到的东西)
碳原子具有特殊的属性:它们可以与其他4个原子键合(不是很特殊),即使在长链中也保持稳定,这是非常独特的。因为它们可以通过许多不同的方式链接和组合,所以我们需要某种命名约定来命名它们。
这是我们可以制造的最小分子:
CH4
叫做甲烷。它仅包含一个碳原子和4个氢原子。下一个是:
CH3 - CH3
这称为乙烷。它由2个碳原子和6个氢原子组成。
接下来的两个是:
CH3 - CH2 - CH3
CH3 - CH2 - CH2 - CH3
它们是丙烷和丁烷。问题始于具有4个碳原子的链,因为它可以用2种不同的方式构建。上面显示了一个,另一个是:
CH3 - CH - CH3
|
CH3
显然这与另一个不同。原子数和键数不同。当然,仅仅折叠结合物并旋转分子不会使它变得与众不同!所以这:
CH3 - CH2 - CH2 - CH3
和这个:
CH3 - CH2
|
CH3 - CH2
是相同的(如果您从事图论,您可以说两个分子之间存在同构;它们是相同的)。从现在开始,我将不再写氢原子,因为氢原子对于这一挑战不是必需的。
当您讨厌有机化学并且要命名的碳原子很多时,您决定编写一个程序来为您完成此任务。您的硬盘驱动器上没有太多空间,因此程序必须尽可能小。
挑战
编写一个程序,将多行文本作为输入(碳链)并输出碳链的名称。输入将仅包含空格,大写的“ c”字符和“ |” 和“-”表示绑定。输入链将永远不会包含循环!例:
输入:
C-C-C-C-C-C
| |
C C-C
输出:
4-乙基-2-甲基己烷
任何输出都是可接受的,只要它是人类可读的并且基本上是相同的(因此,您可以根据需要使用不同的分隔符)。
命名约定:
(请参阅:IUPAC规则)
确定最长的碳链。该链称为父链。
确定所有取代基(从母链附加的基团)。
从赋予取代基最低编号的末端开始编号母链碳原子。比较一系列数字时,“最低”的序列是在出现第一个差异时包含最低数字的序列。如果两个或多个侧链在相同位置,则将最低编号分配给名称中最先出现的编号。
如果相同的取代基出现不止一次,则给出取代基出现在每个点的位置。另外,取代基出现的次数由前缀(di,tri,tetra等)表示。
如果有两个或多个不同的取代基,则使用基本名称按字母顺序列出(忽略前缀)。当按字母顺序排列取代基时,唯一使用的前缀是异丙基或异丁基中的iso。除非彼此比较,否则前缀sec-和tert-不会用于确定字母顺序。
如果长度相等的链竞争作为父链的选择,那么选择将依次进行:
- 侧链数量最多的链。
- 取代基数最低的链。
- 在最小的侧链中碳原子数最大的链。
- 侧链最少的链(叶子数量最少的图表)。
对于父链,命名为:
Number of carbons Name
1 methane
2 ethane
3 propane
4 butane
5 pentane
6 hexane
7 heptane
8 octane
9 nonane
10 decane
11 undecane
12 dodecane
没有链长于12,因此就足够了。对于子链来说是相同的,但是最后没有“ ane”,而是“ yl”。
您可以假设C
s在奇数列中,|
并且-
碳原子之间的绑定(和字符)长1。
测试用例:
输入:
C-C-C-C
输出:
丁烷
输入:
C-C-C
|
C
输出:
2-甲基丙烷
输入:
C-C-C-C
|
C
|
C-C
输出:
3-甲基己烷
输入:
C-C-C-C-C
|
C
|
C
输出:
3-甲基己烷
输入:
C
|
C
|
C-C-C-C
|
C-C-C
|
C-C
输出:
3,4-二甲基-5-乙基庚烷
编辑:对不起,错误的例子。我不是一个好学生:(。他们现在应该固定。
If the same substituent occurs more than once, the location of each point on which the substituent occurs is given. In addition, the number of times the substituent group occurs is indicated by a prefix (di, tri, tetra, etc.).
不应将最后一个例子称为3,4- 二甲基-5-乙基庚烷吗?(我们才刚刚开始有机化学,我可能是错的:P)