Предыстория
У тебя пробуждается головокружение в химической лаборатории, и ты понимаешь, что тебя похитил старый безумный химик. Поскольку он не может хорошо видеть из-за своего возраста, он хочет, чтобы вы работали на него, и только тогда вы можете сбежать из лаборатории.
задача
Ваша задача - вернуть структурные формулы молекул, химическая формула которых будет указана в качестве входных данных. Обратите внимание, что в качестве входных данных будут использоваться только атомы углерода ( 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
ПК, который дал вам химик, чтобы выполнить задание, довольно старый, поэтому у вас недостаточно памяти для сохранения кода, поэтому это код-гольф и самое короткое количество байтов!
Ответы:
Руби, 275
Комбинированные формулы для левой и правой боковых цепей и исключаемая переменная
h
Руби, 279
Неуправляемый в тестовой программе
Выход
Интервал соответствует выводу вопроса. Вертикальная магистраль вместо горизонтальной разрешена в комментариях. Повороты всего дисплея на 90 или 180 градусов считаются эквивалентными.
источник