Grado di insaturazione
Questo non è un puzzle di codice particolarmente difficile, ma mi interessa vedere i tuoi molteplici modi di risolverlo.
Il grado di insaturazione è il numero di doppi legami chimici tra gli atomi e / o il numero di anelli in un composto chimico.
Ti verrà data la formula molecolare di un composto chimico nella forma XaYbZc (dove a, bec sono il numero di atomi di X, Y o Z nel composto) - la formula potrebbe essere di qualsiasi lunghezza e contenere qualsiasi elemento chimico nella tavola periodica (sebbene elementi diversi da C, H, N, F, Cl, Br, potrei essere ignorato in quanto non presenti nella formula). Il composto conterrà almeno un atomo di carbonio. È necessario calcolare e visualizzare il grado di insaturazione.
Ad esempio, il benzene composto (nella foto sotto) ha una DoU di 4 in quanto ha tre doppi legami (mostrati da una doppia linea tra gli atomi) e un singolo anello (un numero di atomi collegati in un anello):
Come definito da LibreTexts :
DoU = (2C + 2 + N - X - H) / 2
Dove:
C
è il numero di atomi di carbonioN
è il numero di atomi di azotoX
è il numero di atomi di alogeno (F
,Cl
,Br
,I
)H
è il numero di atomi di idrogeno
Casi test:
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
Per una spiegazione di CH vedere qui
In sostanza, è necessario identificare se ci sono degli elementi di cui sopra (C, H, N, F, Cl, Br, I) nel composto e, in tal caso, quanti ce ne sono. Quindi, calcolare il grado di insaturazione utilizzando la formula sopra.
Solo C, H, N, F, Cl, Br e I sono input validi per la formula DoU. Ai fini di questo enigma, qualsiasi altro elemento può essere completamente ignorato (ad esempio se il composto fosse C6H6Mn il risultato sarebbe ancora 4). Se non ci fosse nessuno dei composti sopra elencati la risposta sarebbe zero.
Si può presumere che tutti i composti immessi siano chimicamente possibili, contengano almeno un atomo di carbonio e siano noti per esistere. Se l'input non è valido, il programma può produrre 0 o -1 o non produrre alcun risultato.
Regole
Si applicano le regole IO standard e le lacune . L'input deve essere una stringa standard e si può presumere che l'input non sia vuoto. Questo è codegolf - quindi vince il codice più breve in byte.
C9H2O1 --> 0
. Non dovrebbe essere 9? (2*9+2+0-0-2)/2
Na2O
e metilidino:CH
eCCl4He
. Questi sono alcuni casi angolari che potrebbero compromettere alcune soluzioni. A proposito, non è importante per chiunque altro che Mathematica (probabilmente), ma possiamo supporre che i composti (possano) esistano?