¡Acabo de recibir una lección en la escuela sobre alcanos y pensé que probablemente sería un gran desafío de golf de código! ¡No se preocupe, no es tan complicado como parece!
Un resumen rápido
(Tenga en cuenta: para mantener este resumen, no toda la información es 100% precisa).
Los alcanos son cadenas de carbono e hidrógeno. Cada átomo de carbono tiene 4 enlaces, y cada átomo de hidrógeno 1 enlace. Todos los átomos de carbono del alcano forman una cadena donde cada átomo C está conectado a otros 2 átomos C (izquierda y derecha en la estructura de Lewis) y 2 átomos H (arriba y abajo), excepto los extremos de la cadena. , donde el átomo de C está conectado a solo 1 C pero a 3 Hs. Aquí hay un ejemplo básico para el pentano (un alcano con 5 átomos de C y 12 átomos de H):
H H H H H
| | | | |
H-C-C-C-C-C-H
| | | | |
H H H H H
Los alcanos también pueden tener ramas. Pero no se preocupe, todos los alcanos en este desafío se pueden expresar con solo 1 nivel de ramificación. Ejemplo:
H
|
H-C-H
H H H | H
| | | | |
H-C-C-C-C-C-H
| | | | |
H H H H H
Para completar este desafío, también debe comprender la convención de nomenclatura IUPAC para alcanos ramificados. Primero está el alcano raíz. En nuestro ejemplo anterior, esta sería la parte "CCCCC". Según la longitud de esta cadena, tiene un nombre diferente. 1 C se llama metano, 2 C etano, 3 C propano, luego butano, pentano, hexano, heptano, octano, nonano y decano (10 C). Luego, para cada rama, hay un cierto prefijo: Primero, está el índice (desplazamiento) del átomo de C al que se agrega la rama (cuenta desde la izquierda). En el ejemplo, esto sería 4 (también conocido como el 4to átomo de C desde la izquierda). Luego hay un guión (este símbolo: "-") y luego otro nombre que indica el tamaño de la rama. El nombre del tamaño de la rama es casi igual al nombre del tamaño de la raíz, solo que en lugar de "ane" agregas "yl". Con eso, el nombre completo del ejemplo sería
4-methylpentane
Si tiene varias ramas, también están antepuestas, separadas por otro guión. Ejemplo:
2-butyl-5-methylhexane
Una última cosa: si tiene varias ramas del mismo tamaño, se agrupan; sus desplazamientos están separados por comas y comparten el mismo nombre de tamaño, que se antepone con una sílaba adicional dependiendo de cuántas ramas están agrupadas: "di" para 2 ramas, "tri" para 3, "tetra" para 4 (usted No necesito más para este desafío). Ejemplo:
2-ethyl-2,4,6-trimethyldecane
Para su información, esto podría verse más o menos así: (átomos H omitidos)
|
-C-
| |
-C- -C-
| | | | | | | | | |
-C-C-C-C-C-C-C-C-C-C-
| | | | | | | | | |
-C- -C-
| |
Hoja de trucos de 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
Las normas
Escriba un programa que lea dicho nombre IUPAC de STDIN, argumentos de programa o equivalente y lo dibuje como una estructura de lewis ASCII-art para STDOUT (o equivalente).
- Para simplificar, NO tiene que dibujar los átomos H (de lo contrario, se encontrará con problemas de espacio)
- NO puede imprimir ninguna línea horizontal inicial o posterior vacía
- Las cadenas que debe analizar no serán más largas que 10, y el máximo de ramas en un "grupo" está limitado a 4.
- El "desplazamiento" máximo de una rama es 9 (lo que significa que no tiene que analizar más de 1 dígito)
- Sus ramas tienen que alternar entre subir y bajar después de cada nueva rama. En caso de que este espacio ya esté ocupado por otra rama en el mismo desplazamiento, debe dibujarlo en el otro lado de la raíz. (arriba-> abajo, abajo-> arriba)
- En una entrada corrupta, no formateada correctamente o no dibujable, su programa puede comportarse sin especificar.
Este es el código de golf, ¡el código más corto en bytes gana!
¡Feliz golf! :)
4-methylpropane
decir4-methylpentane
?4-<anything>propane
Parece improbable, a menos que haya entendido completamente algo mal.3-3-5-7-methyldodecane
porque la cadena de carbono continua más larga es de 12 de largo. Además, usted dijo que no toda la información en la pregunta era precisa, pero creo que vale la pena señalar que la segunda molécula es2-methylpentane
, no4-methylpentane
porque comience en el carbono con la ramificación más cercana.Your branches have to alternate between going up and down after every new branch.
su ejemplo viola esta regla 2. ¿Cuál es la longitud máxima de cadena que tenemos que admitir?Respuestas:
Python 2, 620 bytes
Explicación
Entrada:
'2-ethyl-2,4,6-trimethyldecane'
Primer análisis de cadena con expresiones regulares (el último grupo es raíz):
[[[2], 2], [[2, 4, 6], 1], [[], 10]]
Cada rama se escribe en una matriz de longitud
len(root)
(aquí se maneja alternar arriba / abajo):[[0, 0], [1, 2], [0, 0], [1, 0], [0, 0], [0, 1], [0, 0], [0, 0], [0, 0], [0, 0]]
Las ramas de cadena 'Left' y 'Right' (
L,R
) y 'root' (C
) se inicializan.Cada rama se agrega a la rama correspondiente 'cadena' (bucle grande).
Los dos lados y el centro están impresos al final:
fuente