Grado de insaturación
Este no es un rompecabezas de código particularmente difícil, pero estoy interesado en ver sus múltiples formas de resolverlo.
El grado de insaturación es el número de enlaces químicos dobles entre átomos y / o el número de anillos en un compuesto químico.
Se le dará la fórmula molecular de un compuesto químico en la forma XaYbZc (donde a, byc son el número de átomos de X, Y o Z en el compuesto); la fórmula podría tener cualquier longitud y contener cualquier elemento químico en la tabla periódica (aunque se pueden ignorar elementos que no sean C, H, N, F, Cl, Br, ya que no figuran en la fórmula). El compuesto contendrá al menos un átomo de carbono. Debe calcular y mostrar su grado de insaturación.
Por ejemplo, el benceno compuesto (que se muestra a continuación) tiene una DoU de 4, ya que tiene tres enlaces dobles (mostrados por una línea doble entre los átomos) y un solo anillo (varios átomos conectados en un bucle):
Según lo definido por LibreTexts :
DoU = (2C + 2 + N - X - H) / 2
Dónde:
C
es la cantidad de átomos de carbonoN
es la cantidad de átomos de nitrógenoX
es el número de átomos de halógeno (F
,Cl
,Br
,I
)H
es la cantidad de átomos de hidrógeno
Casos de prueba:
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
Para una explicación de CH ver aquí
En esencia, debe identificar si hay alguno de los elementos anteriores (C, H, N, F, Cl, Br, I) en el compuesto y, de ser así, cuántos hay. Luego, calcule el grado de insaturación utilizando la fórmula anterior.
Solo C, H, N, F, Cl, Br e I son entradas válidas para la fórmula DoU. Para los propósitos de este rompecabezas, cualquier otro elemento puede ignorarse por completo (por ejemplo, si el compuesto fuera C6H6Mn, el resultado aún sería 4). Si no hay ninguno de los compuestos anteriores, la respuesta sería cero.
Puede suponer que todos los compuestos de entrada son químicamente posibles, contienen al menos un átomo de carbono y se sabe que existen. Si la entrada no es válida, el programa puede generar 0 o -1, o no producir ningún resultado.
Reglas
Se aplican las normas estándar de E / S y lagunas . La entrada debe ser una cadena estándar y puede suponer que la entrada no estará vacía. Esto es codegolf, por lo que gana el código más corto en bytes.
C9H2O1 --> 0
. ¿No debería ser 9? (2*9+2+0-0-2)/2
Na2O
y Metilidino:CH
yCCl4He
. Estos son algunos casos de esquina que pueden romper algunas soluciones. Por cierto, no es que importe a nadie más que a Mathematica (probablemente), pero ¿podemos suponer que los compuestos (pueden) existir?