Ho appena avuto una lezione a scuola sugli alcani e ho pensato che sarebbe stata una grande sfida per il golf in codice! Non ti preoccupare, non è così complicato come potrebbe sembrare!
Una rapida rehash
(Nota: per farla breve, non tutte le informazioni sono accurate al 100%.)
Gli alcani sono stringhe di carbonio e idrogeno. Ogni atomo di carbonio ha 4 legami e ogni atomo di idrogeno 1 legame. Tutti gli atomi di carbonio dell'alcano formano una stringa in cui ciascun atomo C è collegato ad altri 2 atomi di C (sinistro e destro nella struttura di Lewis) e 2 atomi di H (su e giù), ad eccezione delle estremità della stringa , in cui l'atomo C è collegato solo a 1 altro C ma a 3 H. Ecco un esempio di base per pentano (un alcano con 5 atomi di C e 12 atomi di H):
H H H H H
| | | | |
H-C-C-C-C-C-H
| | | | |
H H H H H
Anche gli alcani possono avere rami. Ma non preoccuparti, tutti gli alcani in questa sfida possono essere espressi con 1 solo livello di ramificazione. Esempio:
H
|
H-C-H
H H H | H
| | | | |
H-C-C-C-C-C-H
| | | | |
H H H H H
Per completare questa sfida devi anche comprendere la convenzione di denominazione IUPAC per gli alcani ramificati. Prima di tutto c'è l'alcano alcano. Nel nostro esempio precedente, questa sarebbe la parte "CCCCC". A seconda della lunghezza di questa catena, ha un nome diverso. 1 C è chiamato metano, 2 C etano, 3 C propano, quindi butano, pentano, esano, eptano, ottano, nonano e decano (10 C). Quindi, per ogni ramo, c'è un certo prefisso: prima di tutto, c'è l'indice (offset) dell'atomo C al quale viene aggiunto il ramo (conta da sinistra). Nell'esempio, questo sarebbe 4 (ovvero il 4 ° atomo di C da sinistra). Poi c'è un trattino (questo simbolo: "-") e successivamente un altro nome che indica la dimensione del ramo. La denominazione della dimensione del ramo è quasi uguale alla denominazione della dimensione della radice, solo che invece di "ane" aggiungi "yl". Con ciò il nome completo dell'esempio sarebbe
4-methylpentane
Se hai più rami, anche loro sono anteposti, separati da un altro trattino. Esempio:
2-butyl-5-methylhexane
Un'ultima cosa: se hai più rami della stessa dimensione, vengono raggruppati; i loro offset sono separati da virgola e condividono lo stesso nome-dimensione, che viene preceduto da una sillaba aggiuntiva a seconda di quanti rami sono raggruppati: "di" per 2 rami, "tri" per 3, "tetra" per 4 (tu non ho bisogno di più per questa sfida). Esempio:
2-ethyl-2,4,6-trimethyldecane
Cordiali saluti, questo potrebbe apparire un po 'così: (Omissi H-atoms)
|
-C-
| |
-C- -C-
| | | | | | | | | |
-C-C-C-C-C-C-C-C-C-C-
| | | | | | | | | |
-C- -C-
| |
Foglio informativo sulla nomenclatura
Prefixes indicating numbers:
| Num | Prefix |
|------|--------|
| 1 | meth |
| 2 | eth |
| 3 | prop |
| 4 | but |
| 5 | pent |
| 6 | hex |
| 7 | hept |
| 8 | oct |
| 9 | non |
| 10 | dec |
Suffix root: ane
Suffix branch: yl
Prefixes grouping: di, tri, tetra
Le regole
Scrivi un programma che legge un tale nome IUPAC da STDIN, argomenti del programma o equivalente e lo disegna come una struttura lewis di arte ASCII su STDOUT (o equivalente).
- Per semplicità, NON è necessario disegnare gli atomi di H (altrimenti si incontreranno problemi di spaziatura)
- NON è consentito stampare linee orizzontali iniziali o finali vuote
- Le catene che devi analizzare non saranno più lunghe di 10 e il numero massimo di rami in un "gruppo" è limitato a 4.
- Il "offset" massimo di un ramo è 9 (il che significa che non è necessario analizzare più di 1 cifra)
- I tuoi rami devono alternare andando su e giù dopo ogni nuovo ramo. Nel caso in cui questo spazio sia già occupato da un altro ramo con lo stesso offset, devi disegnarlo sull'altro lato della radice. (su-> giù, giù-> su)
- In caso di input corrotti, non correttamente formattati o altrimenti non disegnabili, il programma potrebbe comportarsi in modo non specificato.
Questo è il codice golf, vince il codice più corto in byte!
Buon golf! :)
3-3-5-7-methyldodecane
perché la catena di carbonio continua più lunga è lunga 12. Inoltre, hai detto che non tutte le informazioni nella domanda erano accurate, ma penso che valga la pena sottolineare che la seconda molecola è 2-methylpentane
, non 4-methylpentane
perché inizi dal carbonio con la ramificazione più vicina.
Your branches have to alternate between going up and down after every new branch.
tuo esempio viola questa regola 2. Qual è la lunghezza massima della catena che dobbiamo supportare (l'analisi dei prefissi farà parte della sfida.) Dovresti collegare (o preferibilmente copiare) un elenco di nomenclature.
4-methylpropane
dire4-methylpentane
?4-<anything>propane
sembra improbabile, a meno che non abbia frainteso completamente qualcosa.