Степень ненасыщенности
Это не особенно сложная головоломка, но мне интересно увидеть ваши многочисленные способы ее решения.
Степень ненасыщенности - это число двойных химических связей между атомами и / или число колец в химическом соединении.
Вам будет дана молекулярная формула химического соединения в форме XaYbZc (где a, b и c - число атомов X, Y или Z в соединении) - формула может иметь любую длину и содержать любой химический элемент в периодической таблице (хотя элементы, отличные от C, H, N, F, Cl, Br, I могут игнорироваться, поскольку они не фигурируют в формуле). Соединение будет содержать по меньшей мере один атом углерода. Вы должны рассчитать и отобразить его степень ненасыщенности.
Например, сложный бензол (изображенный ниже) имеет 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) в соединении, и если да, то сколько их. Затем вычислите степень ненасыщенности, используя приведенную выше формулу.
Только C, H, N, F, Cl, Br и I являются допустимыми значениями для формулы DoU. В целях этой загадки любые другие элементы могут быть полностью проигнорированы (например, если соединение было C6H6Mn, результат все равно будет 4). Если нет ни одного из вышеперечисленных соединений, ответ будет нулевым.
Можно предположить, что все вводимые соединения химически возможны, содержат по меньшей мере один атом углерода и, как известно, существуют. Если ввод неверен, программа может вывести либо 0, либо -1, либо не дать результата.
правила
Применяются стандартные правила ввода-вывода и лазейки . Ввод должен быть стандартной строкой, и вы можете предположить, что ввод не будет пустым. Это Codegolf - поэтому выигрывает самый короткий код в байтах.
C9H2O1 --> 0
. Разве это не должно быть 9? (2*9+2+0-0-2)/2
Na2O
и Метилидин:CH
иCCl4He
. Это некоторые угловые случаи, которые могут сломать несколько решений. Кстати, не то, чтобы это имело значение для кого-либо, кроме Mathematica (вероятно), но можем ли мы предположить, что соединения (могут) существовать?