Ungesättigtheitsgrad
Dies ist kein besonders schwieriges Code-Puzzle - aber ich bin gespannt auf Ihre vielfältigen Lösungsmöglichkeiten.
Der Grad der Ungesättigtheit ist die Anzahl der chemischen Doppelbindungen zwischen Atomen und / oder die Anzahl der Ringe in einer chemischen Verbindung.
Sie erhalten die Summenformel einer chemischen Verbindung in der Form XaYbZc (wobei a, b und c die Anzahl der Atome von X, Y oder Z in der Verbindung sind) - die Formel kann beliebig lang sein und ein beliebiges chemisches Element enthalten im Periodensystem (obwohl andere Elemente als C, H, N, F, Cl, Br, I möglicherweise ignoriert werden, da sie nicht in der Formel enthalten sind). Die Verbindung enthält mindestens ein Atom Kohlenstoff. Sie müssen den Grad der Ungesättigtheit berechnen und anzeigen.
Zum Beispiel hat die Verbindung Benzol (siehe Abbildung unten) eine DoU von 4, da sie drei Doppelbindungen (dargestellt durch eine Doppellinie zwischen Atomen) und einen einzelnen Ring (eine Anzahl von Atomen, die in einer Schleife verbunden sind) aufweist:
Wie von LibreTexts definiert :
DoU = (2C + 2 + N - X - H) / 2
Wo:
C
ist die Anzahl der KohlenstoffatomeN
ist die Anzahl der StickstoffatomeX
die Zahl der Halogenatome ist (F
,Cl
,Br
,I
)H
ist die Anzahl der Wasserstoffatome
Testfälle:
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
Eine Erklärung zu CH finden Sie hier
Im Wesentlichen müssen Sie feststellen, ob die Verbindung eines der oben genannten Elemente (C, H, N, F, Cl, Br, I) enthält, und wenn ja, wie viele. Berechnen Sie dann den Grad der Ungesättigtheit mit der obigen Formel.
Nur C, H, N, F, Cl, Br und I sind gültige Eingaben für die DoU-Formel. Für die Zwecke dieses Puzzles können alle anderen Elemente vollständig ignoriert werden (z. B. wenn die Verbindung C6H6Mn wäre, wäre das Ergebnis immer noch 4). Wenn es keine der obigen Verbindungen gibt, wäre die Antwort Null.
Sie können davon ausgehen, dass alle eingegebenen Verbindungen chemisch möglich sind, mindestens ein Atom Kohlenstoff enthalten und bekanntermaßen existieren. Wenn die Eingabe ungültig ist, gibt das Programm möglicherweise entweder 0 oder -1 aus oder erzeugt kein Ergebnis.
Regeln
Es gelten Standard-E / A-Regeln und Lücken . Die Eingabe muss eine Standardzeichenfolge sein, und Sie können davon ausgehen, dass die Eingabe nicht leer ist. Dies ist Codegolf - also gewinnt der kürzeste Code in Bytes.
Na2O
und Methylidin:CH
undCCl4He
. Dies sind einige Eckfälle, die einige Lösungen beschädigen können. Übrigens nicht, dass es für andere als Mathematica (wahrscheinlich) von Bedeutung ist, aber können wir annehmen, dass die Verbindungen (können) existieren?C9H2O1 --> 0
. Sollte es nicht 9 sein?(2*9+2+0-0-2)/2
Antworten:
JavaScript (ES6),
117112 ByteRückgabe
0
für ungültige Eingaben.Testfälle
Code-Snippet anzeigen
Alternative Version, 103 Bytes
Wenn die Eingabe garantiert gültig wäre - wie die Einführung der Herausforderung irreführend nahe legt - könnten wir einfach Folgendes tun:
Demo
Code-Snippet anzeigen
quelle
Python 3 ,
142 151148 BytesGibt bei einem Fehler 0 zurück.
Dank @HyperNeutrino, der die Bytes reduziert.
Probieren Sie es online aus!
quelle
dict
dort!Pip ,
7067 BytesNimmt die chemische Formel als Befehlszeilenargument. Ausgänge
0
für ungültige Eingänge. Probieren Sie es online aus!Erläuterung
Verwendet eine Reihe von Regex-Ersetzungen, um die chemische Formel in eine mathematische Formel umzuwandeln, bewertet sie und nimmt einige Änderungen vor, um den endgültigen Wert zu erhalten.
Die Ersetzungen (leicht ungolfed Version):
Wir bewerten die resultierende Zeichenfolge mit
V
. Das gibt uns2C + N − X − H
. Um den richtigen Wert zu erhalten, nehmen wir folgende Anpassungen vor:quelle
C (gcc) , 195
197202BytesWahrscheinlich die längste Antwort.
Probieren Sie es online aus!
Gibt bei einem Fehler 0 zurück.
quelle