Предыстория
У тебя пробуждается головокружение в химической лаборатории, и ты понимаешь, что тебя похитил старый безумный химик. Поскольку он не может хорошо видеть из-за своего возраста, он хочет, чтобы вы работали на него, и только тогда вы можете сбежать из лаборатории.
задача
Ваша задача - вернуть структурные формулы молекул, химическая формула которых будет указана в качестве входных данных. Обратите внимание, что в качестве входных данных будут использоваться только атомы углерода ( C), кислорода ( O) и водорода ( H). В отличие от химических формул, а 0является допустимым квантификатором и 1не может быть опущено (например, C1H4O0является допустимым вводом, но CH4не является).
Чтобы предотвратить двусмысленность, мы предполагаем, что двойные и тройные связи не появляются в молекулах. Все атомы углерода нуждаются в 4 одинарных связях, все атомы кислорода - в 2, а атомы водорода - в одной. Мы также предполагаем, что O-Oоблигации также не существуют. Молекула не должна ни существовать, ни быть стабильной.
На входе никогда не будет больше 3атомов углерода, чтобы обеспечить легкость на дисплее.
Вы только должны отобразить молекулы, атомы углерода которых расположены по прямой линии без перерыва. Ergo, без 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
ПК, который дал вам химик, чтобы выполнить задание, довольно старый, поэтому у вас недостаточно памяти для сохранения кода, поэтому это код-гольф и самое короткое количество байтов!