(Ich bin kein Chemiker! Ich könnte mich in einigen Dingen irren, ich schreibe, was ich in der Schule gelernt habe.)
Kohlenstoffatome haben ein besonderes Merkmal: Sie können an 4 andere Atome binden (was nicht besonders ist) und sie bleiben auch in langen Ketten stabil, was sehr einzigartig ist. Da sie auf viele verschiedene Arten verkettet und kombiniert werden können, benötigen wir eine Art Namenskonvention, um sie zu benennen.
Dies ist das kleinste Molekül, das wir herstellen können:
CH4
Es heißt Methan. Es besteht nur aus einem Kohlenstoff und 4 Wasserstoffatomen. Der nächste ist:
CH3 - CH3
Dies nennt man Ethan. Es besteht aus 2 Kohlenstoff- und 6 Wasserstoffatomen.
Die nächsten 2 sind:
CH3 - CH2 - CH3
CH3 - CH2 - CH2 - CH3
Sie sind Propan und Butan. Die Probleme beginnen bei den Ketten mit 4 Kohlenstoffatomen, da sie auf zwei verschiedene Arten aufgebaut werden können. Eines ist oben gezeigt und das andere ist:
CH3 - CH - CH3
|
CH3
Dies ist offensichtlich nicht dasselbe wie das andere. Die Anzahl der Atome und die Bindungen sind unterschiedlich. Nur Bindungen zu falten und das Molekül zu drehen, macht es natürlich nicht anders! Also das:
CH3 - CH2 - CH2 - CH3
Und das:
CH3 - CH2
|
CH3 - CH2
Sind die gleichen (Wenn Sie in der Graphentheorie sind, können Sie sagen, dass wenn es Isomorphismus zwischen 2 Molekülen gibt; sie sind die gleichen). Von nun an werde ich keine Wasserstoffatome mehr aufschreiben, da diese für diese Herausforderung nicht unbedingt erforderlich sind.
Da Sie organische Chemie hassen und viele verschiedene Kohlenstoffatome zu nennen haben, beschließen Sie, ein Programm zu schreiben, das dies für Sie erledigt. Sie haben nicht zu viel Speicherplatz auf Ihrer Festplatte, daher muss das Programm so klein wie möglich sein.
Die Herausforderung
Schreiben Sie ein Programm, das einen mehrzeiligen Text als Eingabe (eine Kohlenstoffkette) und den Namen der Kohlenstoffkette ausgibt. Die Eingabe enthält nur Leerzeichen, Großbuchstaben 'c' und '|' und '-', was eine Bindung darstellt. Die Eingabekette enthält niemals Zyklen! Beispiel:
Eingang:
C-C-C-C-C-C
| |
C C-C
Ausgabe:
4-Ethyl-2-methylhexan
Jede Ausgabe ist akzeptabel, solange sie für den Menschen lesbar und im Wesentlichen gleich ist (Sie können also beispielsweise verschiedene Trennzeichen verwenden, wenn Sie dies wünschen).
Die Namenskonvention:
(Siehe: IUPAC-Regeln )
Identifizieren Sie die längste Kohlenstoffkette. Diese Kette wird als Elternkette bezeichnet.
Identifizieren Sie alle Substituenten (Gruppen, die an die Stammkette angefügt sind).
Nummerieren Sie die Kohlenstoffe der Grundkette ab dem Ende, das den Substituenten die niedrigsten Zahlen verleiht. Beim Vergleich einer Reihe von Zahlen ist die "niedrigste" Reihe diejenige, die bei der ersten Differenz die niedrigste Zahl enthält. Wenn sich zwei oder mehr Seitenketten an gleichen Positionen befinden, weisen Sie derjenigen die niedrigste Nummer zu, die im Namen an erster Stelle steht.
Wenn der gleiche Substituent mehr als einmal vorkommt, wird die Position jedes Punktes angegeben, an dem der Substituent vorkommt. Außerdem wird die Häufigkeit des Auftretens der Substituentengruppe durch ein Präfix (Di, Tri, Tetra usw.) angegeben.
Wenn es zwei oder mehr verschiedene Substituenten gibt, werden sie in alphabetischer Reihenfolge unter Verwendung des Basisnamens aufgelistet (ignorieren Sie die Präfixe). Das einzige Präfix, das verwendet wird, wenn die Substituenten in alphabetischer Reihenfolge angeordnet werden, ist iso wie in Isopropyl oder Isobutyl. Die Präfixe sec- und tert- werden nicht zur Bestimmung der alphabetischen Reihenfolge verwendet, es sei denn, sie werden miteinander verglichen.
Wenn Ketten gleicher Länge als übergeordnete Kette um die Auswahl konkurrieren, wird die Auswahl in Reihe zu Folgendem durchgeführt:
- die Kette mit der größten Anzahl von Seitenketten.
- die Kette, deren Substituenten die niedrigsten Zahlen haben.
- die Kette hat die größte Anzahl von Kohlenstoffatomen in der kleinsten Seitenkette.
- die Kette mit den am wenigsten verzweigten Seitenketten (ein Diagramm mit der geringsten Anzahl von Blättern).
Für die übergeordnete Kette lautet die Benennung:
Number of carbons Name
1 methane
2 ethane
3 propane
4 butane
5 pentane
6 hexane
7 heptane
8 octane
9 nonane
10 decane
11 undecane
12 dodecane
Keine Kette ist länger als 12, das reicht also aus. Für die Unterketten ist es dasselbe, aber anstelle von 'ane' am Ende haben wir 'yl'.
Sie können davon ausgehen, dass sich das C
s in den ungeraden Spalten befindet und die Bindungen ( |
und -
Zeichen) zwischen den Kohlenstoffatomen 1 lang sind.
Testfälle:
Eingang:
C-C-C-C
Ausgabe:
Butan
Eingang:
C-C-C
|
C
Ausgabe:
2-Methylpropan
Eingang:
C-C-C-C
|
C
|
C-C
Ausgabe:
3-Methylhexan
Eingang:
C-C-C-C-C
|
C
|
C
Ausgabe:
3-Methylhexan
Eingang:
C
|
C
|
C-C-C-C
|
C-C-C
|
C-C
Ausgabe:
3,4-Dimethyl-5-ethylheptan
Edit: Sorry für die falschen Beispiele. Ich war kein guter Schüler :(. Sie sollten jetzt behoben werden.
If the same substituent occurs more than once, the location of each point on which the substituent occurs is given. In addition, the number of times the substituent group occurs is indicated by a prefix (di, tri, tetra, etc.).
Sollte das letzte Beispiel nach dieser Regel nicht 3,4- Di- methyl-5- ethylheptan heißen ? (Wir fangen gerade mit der organischen Chemie an, ich könnte mich irren: P)Antworten:
Python 2 ,
187618711870185918461830182619001932191318471833163516131596 BytesProbieren Sie es online!
Na siehst du. Mit Sicherheit nicht der Golfspieler, aber es funktioniert (hoffe ich): D
Hat mich vielleicht 10 Stunden gekostet? Wahrscheinlich mein längster Golf in Größe und Zeit, und das sagt etwas aus, wenn man bedenkt, dass ich früher Java D verwendet habe:
Logik:
BEARBEITEN : Fehler behoben , durch den Fehler verursacht wurden, wenn keine Seitenketten vorhanden waren.
BEARBEITEN : Dank an MD XF für das Bemerken einiger zusätzlicher Leerzeichen (Einrückung für die for-Schleife).
EDIT : Ich habe das Präfix für den gleichen Substituenten völlig vergessen.
HINWEIS : Jede Linie muss dieselbe Breite haben, damit dies funktioniert. Das heißt, nachfolgende Leerzeichen sind erforderlich.
Unterhaltsame Tatsache: Die meisten cyclischen Kohlenwasserstoffe werden als "Methan" bestimmt.
Fun fact: Wenn du
C-C-...-C-C
mit 13 Cs machst , wird es gebenethane
, dannthane
für 14,ropane
für 15, etc.-79 Bytes dank Jonathan Frech
-119 Bytes dank NieDzejkob
-17 Bytes dank Ovs
quelle