backstory
Ti svegli vertigini in un laboratorio di chimica e ti rendi conto di essere stato rapito da un vecchio chimico pazzo. Dal momento che non riesce a vedere molto bene a causa della sua età, vuole che tu lavori per lui e solo allora puoi fuggire dal laboratorio.
Compito
È tuo compito restituire le formule strutturali delle molecole la cui formula chimica verrà data come input. Si noti che solo gli atomi di carbonio ( C
), ossigeno ( O
) e idrogeno ( H
) verranno utilizzati come input. A differenza delle formule chimiche, a 0
è un quantificatore valido e a 1
non può essere omesso (ad es. C1H4O0
È un input valido, ma CH4
non lo è).
Per prevenire l'ambiguità, supponiamo che nelle molecole non compaiano doppi e tripli legami. Tutti gli atomi di carbonio hanno bisogno di 4 legami singoli, tutti gli atomi di ossigeno ne hanno bisogno 2 e gli atomi di idrogeno ne hanno bisogno. Supponiamo anche che O-O
non esistano obbligazioni. La molecola non deve esistere né essere stabile.
L'ingresso non conterrà mai più di 3
atomi di carbonio per garantire leggerezza nel display dell'uscita.
Dovresti solo visualizzare le molecole i cui atomi di carbonio sono disposti in linea retta senza interruzioni. Ergo, nessun C-O-C
legame.
È necessario restituire tutte le possibili molecole non escluse dalle regole precedenti. Non è necessario gestire input non validi.
L'esempio seguente mostra tutte le soluzioni che devi gestire per quella molecola.
Una rotazione di 180 gradi nel piano della pagina di una formula della molecola è considerata una ridondanza e non deve essere visualizzata.
Nell'esempio seguente mostrerò tutte le possibili formule per una molecola, quindi indicherò quelle che non devono essere visualizzate.
Esempio
Ingresso: C2H6O2
Innanzitutto, ecco tutte le possibili formule per questo input (Grazie a @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
E qui ci sono le formule che dovrebbero essere nell'output se eliminiamo le rotazioni di 180 ° nel piano della pagina:
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
Non è necessario emettere le etichette delle formule ed è possibile produrre una delle rotazioni quando ne esistono due. Ad esempio, è possibile emettere 02 o 35.
Ecco alcuni input validi per testare il tuo codice:
C3H8O2 C1H4O0 C2H6O2 C1H4O1 C2H6O2
Il PC che il chimico ti ha dato per completare il tuo compito è piuttosto vecchio, quindi non hai molta memoria per salvare il tuo codice, quindi questo è code-golf e vince il minor numero di byte!