Historia
Budzisz się z zawrotami głowy w laboratorium chemicznym i zdajesz sobie sprawę, że zostałeś porwany przez starego szalonego chemika. Ponieważ nie widzi bardzo dobrze ze względu na swój wiek, chce, abyś dla niego pracował i tylko wtedy możesz uciec z laboratorium.
Zadanie
Twoim zadaniem jest zwrócenie wzorów strukturalnych cząsteczek, których wzór chemiczny zostanie podany jako dane wejściowe. Należy pamiętać, że tylko atomy węgla ( C
), tlenu ( O
) i wodoru ( H
) zostaną użyte jako wsad. W przeciwieństwie do wzorów chemicznych, a 0
jest poprawnym kwantyfikatorem i 1
nie można go pominąć (np. C1H4O0
Jest poprawnym wejściem, ale CH4
nie jest).
Aby zapobiec dwuznaczności, zakładamy, że podwójne i potrójne wiązania nie pojawiają się w cząsteczkach. Wszystkie atomy węgla potrzebują 4 pojedynczych wiązań, wszystkie atomy tlenu potrzebują 2, a atomy wodoru potrzebują jednego. Zakładamy również, że O-O
obligacje również nie istnieją. Cząsteczka nie musi istnieć ani być stabilna.
Wejście nigdy nie będzie zawierać więcej niż 3
atomy węgla, aby zapewnić lekkość na wyświetlaczu wyjścia.
Powinieneś wyświetlać tylko te cząsteczki, których atomy węgla są ułożone w linii prostej bez zakłóceń. Ergo, bez C-O-C
obligacji.
Musisz zwrócić wszystkie możliwe cząsteczki, których nie wykluczają poprzednie zasady. Nie musisz obsługiwać nieprawidłowych danych wejściowych.
Poniższy przykład pokazuje wszystkie rozwiązania, z którymi musisz sobie poradzić dla tej cząsteczki.
Obrót o 180 stopni w płaszczyźnie strony jednego ze wzorów cząsteczki jest uważany za redundancję i nie musi być wyświetlany.
W poniższym przykładzie pokażę wszystkie możliwe formuły dla cząsteczki, a następnie wskażę te, które nie muszą być wyświetlane.
Przykład
Wejście: C2H6O2
Po pierwsze, oto wszystkie możliwe formuły dla tego wkładu (dziękuję @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
A oto wzory, które powinny znaleźć się na wyjściu, jeśli weźmiemy obrót o 180 ° w płaszczyźnie strony:
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
Nie musisz generować etykiet formuł i możesz wygenerować jeden z obrotów, jeśli istnieją dwa. Na przykład możesz wyprowadzić albo 02 albo 35.
Oto kilka poprawnych danych wejściowych do testowania kodu:
C3H8O2 C1H4O0 C2H6O2 C1H4O1 C2H6O2
Komputer, który dał ci chemik do wykonania zadania, jest dość stary, więc nie masz na nim dużo pamięci do zapisania kodu, więc jest to golf golfowy i najmniejsza ilość bajtów wygrywa!
Odpowiedzi:
Ruby, 275
Połączone formuły dla lewych i prawych łańcuchów bocznych i zmienna wyeliminowana
h
Ruby, 279
Niegolfowany w programie testowym
Wynik
Odstępy są zgodne z wynikiem zapytania. Szkielet pionowy zamiast poziomy dozwolony na komentarze. Obracanie całego wyświetlacza o 90 lub 180 stopni uważa się za równoważne.
źródło