Hintergrundgeschichte
Sie wachen in einem Chemielabor schwindelig auf und stellen fest, dass Sie von einem alten verrückten Chemiker entführt wurden. Da er aufgrund seines Alters nicht gut sehen kann, möchte er, dass Sie für ihn arbeiten und nur dann können Sie dem Labor entkommen.
Aufgabe
Es ist Ihre Aufgabe, die Strukturformeln der Moleküle zurückzugeben, deren chemische Formel als Eingabe angegeben wird. Beachten Sie, dass nur die Atome Kohlenstoff ( C
), Sauerstoff ( O
) und Wasserstoff ( H
) als Eingabe verwendet werden. Anders als in chemischen Formeln ist a 0
ein gültiger Quantifizierer und a 1
kann nicht weggelassen werden (z. B. C1H4O0
ist eine gültige Eingabe, ist es aber CH4
nicht).
Um Mehrdeutigkeiten zu vermeiden, nehmen wir an, dass Doppel- und Dreifachbindungen nicht in den Molekülen auftreten. Alle Kohlenstoffatome benötigen 4 Einfachbindungen, alle Sauerstoffatome 2 und Wasserstoffatome eine. Wir gehen auch davon aus, dass O-O
es auch keine Anleihen gibt. Das Molekül muss weder existieren noch stabil sein.
Der Eingang enthält niemals mehr als 3
Kohlenstoffatome, um die Helligkeit des Displays des Ausgangs zu gewährleisten.
Sie sollten nur die Moleküle anzeigen, deren Kohlenstoffatome ohne Unterbrechung in einer geraden Linie angeordnet sind. Ergo keine C-O-C
Anleihen.
Sie müssen alle möglichen Moleküle zurückgeben, die von den vorherigen Regeln nicht ausgeschlossen wurden. Sie müssen keine ungültigen Eingaben verarbeiten.
Das folgende Beispiel zeigt alle Lösungen, die Sie für dieses Molekül verarbeiten müssen.
Eine Drehung um 180 Grad in der Ebene der Seite einer der Molekülformeln wird als Redundanz betrachtet und muss nicht angezeigt werden.
Im folgenden Beispiel zeige ich alle möglichen Formeln für ein Molekül und zeige dann diejenigen auf, die nicht angezeigt werden müssen.
Beispiel
Eingang: C2H6O2
Hier sind zunächst alle möglichen Formeln für diese Eingabe (Vielen Dank an @Jonathan Allan).
01 H
|
O H
| |
H - O - C - C - H
| |
H H
02 H
|
H O
| |
H - O - C - C - H
| |
H H
03 H H
| |
H - O - C - C - O - H
| |
H H
04 H H
| |
H - O - C - C - H
| |
H O
|
H
05 H H
| |
H - O - C - C - H
| |
O H
|
H
12 H H
| |
O O
| |
H - C - C - H
| |
H H
13 H
|
O H
| |
H - C - C - O - H
| |
H H
14 H
|
O H
| |
H - C - C - H
| |
H O
|
H
15 H
|
O H
| |
H - C - C - H
| |
O H
|
H
23 H
|
H O
| |
H - C - C - O - H
| |
H H
24 H
|
H O
| |
H - C - C - H
| |
H O
|
H
25 H
|
H O
| |
H - C - C - H
| |
O H
|
H
34 H H
| |
H - C - C - O - H
| |
H O
|
H
35 H H
| |
H - C - C - O - H
| |
O H
|
H
45 H H
| |
H - C - C - H
| |
O O
| |
H H
Und hier sind die Formeln, die in der Ausgabe enthalten sein sollten, wenn wir die Umdrehungen von 180 ° in der Ebene der Seite herausnehmen:
01 H
|
O H
| |
H - O - C - C - H
| |
H H
03 H H
| |
H - O - C - C - O - H
| |
H H
12 H H
| |
O O
| |
H - C - C - H
| |
H H
13 H
|
O H
| |
H - C - C - O - H
| |
H H
14 H
|
O H
| |
H - C - C - H
| |
H O
|
H
15 H
|
O H
| |
H - C - C - H
| |
O H
|
H
23 H
|
H O
| |
H - C - C - O - H
| |
H H
25 H
|
H O
| |
H - C - C - H
| |
O H
|
H
35 H H
| |
H - C - C - O - H
| |
O H
|
H
Sie müssen die Beschriftungen der Formeln nicht ausgeben und können eine der Rotationen ausgeben, wenn zwei vorhanden sind. Zum Beispiel können Sie entweder 02 oder 35 ausgeben.
Hier sind einige gültige Eingaben zum Testen Ihres Codes:
C3H8O2 C1H4O0 C2H6O2 C1H4O1 C2H6O2
Der PC, den der Chemiker Ihnen zur Erfüllung Ihrer Aufgabe zur Verfügung gestellt hat, ist ziemlich alt, sodass Sie nicht viel Speicher haben, um Ihren Code zu speichern. Dies ist also Code-Golf und die kürzeste Anzahl von Byte-Gewinnen!
Antworten:
Ruby, 275
Kombinierte Formeln für linke und rechte Seitenketten und eliminierte Variable
h
Ruby, 279
Ungolfed im Testprogramm
Ausgabe
Der Abstand entspricht der Ausgabe der Frage. Backbone vertikal statt horizontal pro Kommentar erlaubt. Drehungen der gesamten Anzeige um 90 oder 180 Grad werden als gleichwertig angesehen.
quelle