Acabei de ter uma aula na escola sobre alcanos e achei que provavelmente seria um grande desafio para o código de golfe! Não se preocupe, não é tão complicado quanto pode parecer!
Uma rápida reformulação
(Observação: para manter esse resumo, nem todas as informações são 100% precisas.)
Os alcanos são cadeias de carbono e hidrogênio. Todo átomo de carbono tem 4 ligações, e todo átomo de hidrogênio 1 ligação. Todos os átomos de carbono do alcano formam uma cadeia onde cada átomo C está conectado a 2 outros átomos C (esquerdo e direito na estrutura de Lewis) e 2 átomos H (para cima e para baixo), exceto nas extremidades da cadeia , onde o átomo C está conectado a apenas 1 outro C, mas 3 Hs. Aqui está um exemplo básico de pentano (um alcano com 5 átomos de C e 12 átomos de H):
H H H H H
| | | | |
H-C-C-C-C-C-H
| | | | |
H H H H H
Os alcanos também podem ter ramos. Mas não se preocupe, todos os alcanos nesse desafio podem ser expressos com apenas 1 nível de ramificação. Exemplo:
H
|
H-C-H
H H H | H
| | | | |
H-C-C-C-C-C-H
| | | | |
H H H H H
Para concluir esse desafio, você também deve entender a convenção de nomenclatura IUPAC para alcanos ramificados. Primeiro, há o alcano raiz. No nosso exemplo anterior, essa seria a parte "CC0C". Dependendo do tamanho dessa cadeia, ela tem um nome diferente. 1 C é chamado metano, 2 C etano, 3 C propano, depois butano, pentano, hexano, heptano, octano, nonano e decano (10 C). Então, para cada ramificação, existe um certo prefixo para isso: primeiro, há o índice (deslocamento) do átomo C ao qual a ramificação é anexada (contagem da esquerda). No exemplo, este seria 4 (também conhecido como o quarto átomo C da esquerda). Depois, há um hífen (este símbolo: "-") e depois outro nome indicando o tamanho do ramo. A nomeação do tamanho da ramificação é quase a mesma que a nomeação do tamanho da raiz, apenas que em vez de "ane" você acrescenta "yl". Com isso, o nome completo do exemplo seria
4-methylpentane
Se você tiver várias ramificações, elas também serão anexadas, separadas por outro hífen. Exemplo:
2-butyl-5-methylhexane
Uma última coisa: se você tiver vários ramos do mesmo tamanho, eles serão agrupados; suas compensações são separadas por vírgula e compartilham o mesmo nome de tamanho, que é anexado por uma sílaba extra, dependendo de quantas ramificações estão agrupadas: "di" para 2 ramificações, "tri" para 3, "tetra" para 4 (você não precisa de mais para este desafio). Exemplo:
2-ethyl-2,4,6-trimethyldecane
Para sua informação, isso poderia se parecer com algo assim: (omitidos átomos-H)
|
-C-
| |
-C- -C-
| | | | | | | | | |
-C-C-C-C-C-C-C-C-C-C-
| | | | | | | | | |
-C- -C-
| |
Cheatsheet da 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
As regras
Escreva um programa que leia esse nome IUPAC em STDIN, argumentos do programa ou equivalente e o desenhe como uma estrutura de arte ASCII para STDOUT (ou equivalente).
- Para simplificar, você NÃO precisa desenhar os átomos de H (senão você terá problemas de espaçamento)
- NÃO é permitido imprimir linhas horizontais iniciais ou finais vazias
- As cadeias que você precisa analisar não terão mais que 10 e o máximo de ramificações em um "grupo" é limitado a 4.
- O "deslocamento" máximo de uma ramificação é 9 (o que significa que você não precisa analisar mais de um dígito)
- Seus ramos precisam alternar entre subir e descer após cada novo ramo. Caso esse espaço já seja ocupado por outra ramificação no mesmo deslocamento, é necessário desenhá-lo do outro lado da raiz. (cima-> baixo, baixo-> cima)
- Na entrada corrompida, não formatada corretamente ou não extraível, seu programa pode se comportar não especificado.
Este é o código de golfe, o código mais curto em bytes vence!
Feliz golfe! :)
4-methylpropane
dizer4-methylpentane
?4-<anything>propane
parece improvável, a menos que eu tenha entendido algo completamente errado.3-3-5-7-methyldodecane
porque a cadeia de carbono contínua mais longa tem 12 anos. Além disso, você disse que nem todas as informações da pergunta eram precisas, mas acho que vale a pena ressaltar que a segunda molécula é2-methylpentane
, não4-methylpentane
porque você começa no carbono com a ramificação mais próxima.Your branches have to alternate between going up and down after every new branch.
seu exemplo viola esta regra 2. Qual é o comprimento máximo da cadeia que temos de suportar (analisar os prefixos fará parte do desafio). Você deve vincular (ou preferencialmente copiar) uma lista de nomenclatura.Respostas:
Python 2, 620 bytes
Explicação
Entrada:
'2-ethyl-2,4,6-trimethyldecane'
Primeiro analisa a string com regex (o último grupo é root):
[[[2], 2], [[2, 4, 6], 1], [[], 10]]
Cada ramificação é escrita em uma matriz de comprimento
len(root)
(alternar para cima / para baixo é tratado aqui):[[0, 0], [1, 2], [0, 0], [1, 0], [0, 0], [0, 1], [0, 0], [0, 0], [0, 0], [0, 0]]
Os ramos de seqüência de caracteres 'Left' e 'Right' (
L,R
) e 'root' (C
) são inicializados.Cada ramificação é então adicionada à ramificação 'string' correspondente (loop grande).
Os dois lados e o centro são impressos no final:
fonte