Попередня історія
У вас прокидається запаморочення в хімічній лабораторії, і ви розумієте, що вас викрав старий божевільний хімік. Оскільки він не може добре бачити через свій вік, він хоче, щоб ти працював на нього, і тільки тоді ти можеш уникнути лабораторії.
Завдання
Ваше завдання повернути структурні формули молекул, хімічна формула яких буде подана як вхідна. Зауважте, що в якості вхідних даних будуть використовуватися лише атоми вуглецю ( C
), кисню ( O
) та водню ( H
). На відміну від хімічних формул, a 0
є дійсним кількісним показником, 1
його неможливо опустити (наприклад C1H4O0
, вхідний, але CH4
не є).
Щоб запобігти двозначності, ми припускаємо, що подвійні та потрійні зв’язки не з’являються в молекулах. Усі атоми вуглецю потребують 4 одиничних зв’язків, всі атоми кисню потребують 2, а атомів водню - один. Ми також припускаємо, що O-O
облігації також не існують. Молекула не повинна існувати і не бути стабільною.
Вхід ніколи не буде містити більше 3
атомів вуглецю, щоб забезпечити легкість на дисплеї виходу.
Ви повинні лише відображати молекули, атоми вуглецю яких розташовані по прямій лінії без перерви. Ерго, ніяких C-O-C
облігацій.
Ви повинні повернути всі можливі молекули, не виключені попередніми правилами. Вам не потрібно обробляти недійсні введення.
Наступний приклад відображає всі розчини, з якими ви маєте працювати з цією молекулою.
Обертання на 180 градусів у площині сторінки однієї з формул молекули вважається надмірністю і не потребує відображення.
У наведеному нижче прикладі я покажу всі можливі формули для молекули, а потім зазначу ті, які не потрібно відображати.
Приклад
Вхід: C2H6O2
По-перше, ось усі можливі формули для цього вкладу (Дякую @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
А ось формули, які повинні бути у висновку, якщо ми виведемо обертання на 180 ° у площині сторінки:
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
Вам не потрібно виводити мітки формул, і ви можете виводити будь-яке з обертань, коли два є. Наприклад, ви можете вивести або 02, або 35.
Ось кілька дійсних даних для тестування вашого коду:
C3H8O2 C1H4O0 C2H6O2 C1H4O1 C2H6O2
Комп'ютер, який хімік дав вам виконати завдання, досить старий, тому у вас немає багато пам'яті, щоб зберегти свій код, таким чином, це код-гольф і найменший виграш байту!