Dado un número positivo , encuentre el número de alcanos con átomos de carbono, ignorando los estereoisómeros ; o equivalentemente, el número de árboles sin etiqueta con nodos, de modo que cada nodo tenga un grado .
Esta es la secuencia OEIS A000602 .
Ver también: Parafinas - Código Rosetta
Ejemplo
Para , la respuesta es , porque el heptano tiene nueve isómeros :
- Heptano :
- 2-metilhexano :
- 3-metilhexano :
- 2,2-dimetilpentano :
- 2,3-dimetilpentano :
- 2,4-dimetilpentano :
- 3,3-dimetilpentano :
- 3-etilpentano :
- 2,2,3-trimetilbutano :
Tenga en cuenta que el 3-metilhexano y el 2,3-dimetilpentano son quirales , pero aquí ignoramos los estereoisómeros.
Casos de prueba
intput output
=============
0 1
1 1
2 1
3 1
4 2
5 3
6 5
7 9
8 18
9 35
10 75
11 159
12 355
13 802
14 1858
15 4347
16 10359
17 24894
18 60523
19 148284
20 366319
code-golf
sequence
combinatorics
chemistry
alephalpha
fuente
fuente
Respuestas:
CJam (
100 98 91 8983 bytes)Toma entrada de stdin, salidas a stdout. Tenga en cuenta que esto explota la licencia para no manejar la entrada
0
para guardar dos bytes al incluir las definiciones deC
yD
. Demostración en líneaNota: esto es muy lento e ineficiente en cuanto a memoria. Al recortar las matrices se obtiene una versión mucho más rápida (3 bytes más). Demo en línea .
Disección
Manipulé esto en una descomposición ligeramente más golfista, y luego busqué las secuencias intermedias y descubrí que también están en OEIS:
Las versiones anteriores reutilizaron el bloque
C
(convolucionan dos polinomios) de esta respuesta . He encontrado una mucho más corta, pero no puedo actualizar esa respuesta porque es de una pregunta encadenada.fuente
Node.js 11.6.0 ,
229 223 221218 bytesDerivado de la implementación de Java sugerida en Rosetta Code .
Pruébalo en línea!
fuente
Alquimista (1547 bytes)
Demostración en línea .
Nota: esto es bastante lento. Si prueba con un intérprete que admite la aplicación de una regla varias veces a la vez (por ejemplo, mi , aunque asegúrese de tener la última versión que corrige un error en el analizador), puede obtener una aceleración significativa agregando dos reglas:
que en línea una ruta a través de las reglas existentes
Disección parcial
En un nivel alto, esto usa el mismo enfoque que mi respuesta de CJam.
El modelo de cálculo de Alchemist es esencialmente la máquina de registro Minsky . Sin embargo, Alchemist expone muy bien la equivalencia de código y datos, y al permitir muchas fichas en el lado izquierdo de una regla de producción de manera efectiva, el estado no está limitado a ser representado por un átomo: podemos usar una tupla de átomos, y esto permite subrutinas (no recursivas). Esto es muy útil para el golf. Lo único que realmente le falta son las macros y la depuración.
Para las matrices estoy usando una función de emparejamiento que se puede implementar bastante bien en RM. La matriz vacía está representada por0 0 y el resultado de anteponer X para armar UN es ( 2 A + 1 ) 2X . Hay una subrutina para emparejar: se llama a la subrutina
P
y antepone el valor dee
ab
. Hay dos subrutinas a desvincular:n
unpairsb
ae
yb
; y set
desvinculad
dee
yd
. Esto me permitió guardar bastantes datos aleatorios entre variables, lo cual es importante: una sola operación de "movimiento"se expande al menos a 17 bytes:
donde
S
es el estado actual yT
es el siguiente estado. Una "copia" no destructiva es aún más costosa, ya que debe hacerse como un "movimiento" desde ya
haciab
un auxiliartmp
, seguido de un "movimiento" desdetmp
atrás haciaa
.Ofuscación
Aliasé varias variables entre sí y eliminé unos 60 estados en el proceso de jugar golf en el programa, y muchos de ellos no tenían nombres particularmente significativos de todos modos, pero para jugar golf completamente escribí un minimizador para que los nombres ahora sean completamente indescifrables. ¡Buena suerte en ingeniería inversa! Aquí está el minimizador (en CJam), que hace algunas suposiciones sobre el código, pero podría adaptarse para minimizar otros programas de Alchemist:
fuente
Pari / GP , 118 bytes
Una traducción directa de la respuesta de CJam de Peter Taylor .
Pruébalo en línea!
fuente