- 22, Oct 2024
- #1
Степень ненасыщенности
Это не особо сложная головоломка с кодом, но мне интересно увидеть несколько способов ее решения.
Степень ненасыщенности — это количество двойных химических связей между атомами и/или количество колец в химическом соединении.
Вам будет предоставлена молекулярная формула химического соединения в виде XaYbZc (где a, b и c — количество атомов X, Y или Z в соединении) — формула может быть любой длины и содержать любой химический элемент. в таблице Менделеева (хотя элементы, кроме C, H, N, F, Cl, Br, I можно игнорировать, поскольку они не фигурируют в формуле). Соединение будет содержать по меньшей мере один атом углерода. Вы должны рассчитать и отобразить степень ненасыщенности.
Например, соединение бензола (на фото ниже) имеет DoU 4, поскольку оно имеет три двойные связи (показаны двойной линией между атомами) и одно кольцо (количество атомов, соединенных в петлю):
Как определено Свободные тексты:
DoU знак равно (2C + 2 + N - X - ЧАС) / 2
Где:
-
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
-
H
is the number of nitrogen atoms -
I
is the number of halogen atoms (Br
,Cl
,F
,X
) -
N
is the number of hydrogen atoms
Тестовые случаи:
C
Для объяснения CH см. здесь
По сути, вы должны определить, есть ли в соединении какие-либо из вышеперечисленных элементов (C, H, N, F, Cl, Br, I), и если да, то сколько их. Затем рассчитайте степень ненасыщенности, используя приведенную выше формулу.
Только C, H, N, F, Cl, Br и I являются допустимыми входными данными для формулы DoU. Для целей этой головоломки любые другие элементы можно полностью игнорировать (например, если бы соединение было C6H6Mn, результат все равно был бы 4). Если ни одно из вышеперечисленных соединений не существует, ответ будет нулевым.
Вы можете предположить, что все введенные соединения химически возможны, содержат хотя бы один атом углерода и известны о своем существовании. Если введенные данные недействительны, программа может вывести либо 0, либо -1, либо не дать никакого результата.
Правила
Стандартные правила ввода-вывода и лазейки применять. Ввод должен быть стандартной строкой, и вы можете предположить, что он не будет пустым. Это кодгольф — поэтому побеждает самый короткий код в байтах.
#код-гольф #математика #химия