Попередня історія
У вас прокидається запаморочення в хімічній лабораторії, і ви розумієте, що вас викрав старий божевільний хімік. Оскільки він не може добре бачити через свій вік, він хоче, щоб ти працював на нього, і тільки тоді ти можеш уникнути лабораторії.
Завдання
Ваше завдання повернути структурні формули молекул, хімічна формула яких буде подана як вхідна. Зауважте, що в якості вхідних даних будуть використовуватися лише атоми вуглецю ( 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
Комп'ютер, який хімік дав вам виконати завдання, досить старий, тому у вас немає багато пам'яті, щоб зберегти свій код, таким чином, це код-гольф і найменший виграш байту!