Una fuente es una disposición de monedas en filas para que cada moneda toque dos monedas en la fila debajo de ella, o esté en la fila inferior, y la fila inferior esté conectada. Aquí hay una fuente de 21 monedas:
Su desafío es contar cuántas fuentes diferentes se pueden hacer con un número determinado de monedas.
Se le dará como entrada un número entero positivo n
. Debe generar la cantidad de n
fuentes de monedas diferentes que existen.
Reglas estándar de E / S, lagunas estándar prohibidas. Las soluciones deberían poder calcularse n = 10
en menos de un minuto.
Salida deseada para n = 1 ... 10
:
1, 1, 2, 3, 5, 9, 15, 26, 45, 78
Esta secuencia es OEIS A005169 .
Este es el código de golf. Pocos bytes ganan.
code-golf
sequence
combinatorics
isaacg
fuente
fuente
n
para la cual se debe garantizar que el programa funcione? (es decir, después de lo cual puede romperse)n
, hasta limitaciones de tipo de datos, hardware, etc.Respuestas:
Python, 57 bytes
Como se observa en OEIS , si desplaza cada fila medio paso en relación con la fila debajo de ella, los tamaños de columna forman una secuencia de enteros positivos con un paso ascendente máximo de 1.
La función
f(n,i)
cuenta las secuencias con suman
y último númeroi
. Estos se pueden sumar recursivamente para cada elección del siguiente tamaño de columna de1
ai+1
, que esrange(1,i+2)
. Truncar pararange(1,i+2)[:n]
evitar que las columnas usen más monedas de las que quedan, evitando tener que decir que los negativosn
dan0
. Además, evita un caso base explícito, ya que la suma vacía es0
y no es recurrente, perof(0)
debe establecerse en su1
lugar, para lo cual esor 1
suficiente (como lo haría+0**n
).fuente
M|sgL-Gd<ShHG1gQ0
Mathematica, 59 bytes
Basado en el programa Mathematica en OEIS de Jean-François Alcover.
fuente
1/(1-x/(1-x^2/(1-x^3/(1-x^4/(1-x^5/(...))))))
.Haskell
6048 bytes¡Gracias a @nimi por proporcionar una solución mucho más corta!
Versión antigua.
La función que calcula el valor es la
s
implementación de la fórmula recursiva que se encuentra aquí: https://oeis.org/A005169fuente
t (n-p) q
. Golf en las extremidades: utilizar un operador infijo parat
, intercambiar los guardias y utilizarmap
en lugar de la lista por comprensión:n#p|p>n=0|p<n=sum$map((n-p)#)[1..p+1]|1<2=1
.s
se conviertes=(#1)
, pero no es necesario que le dé un nombre a la función principal, por lo que(#1)
es suficiente. 48 bytes.#
y$
aquí primero =)#
es una función infija definida por el usuario como+
,*
, etc., están funciones predefinidas infijos.$
es otra forma de ajustar la precedencia (además de paréntesis)f (g (h x))
->f$g$h x
o en nuestro casosum(map(...)[...])
->sum$map(...)[...]
.Haskell, 43 bytes
Ver la respuesta de Python para obtener una explicación.
Misma longitud con
min
más quetake
:fuente
Pyth,
2120 bytesPruébalo en línea. Banco de pruebas.
Esta es una implementación directa de la fórmula recursiva en la página OEIS , como la respuesta de Matlab .
fuente
Matlab,
115105bytesImplementación de la fórmula recursiva que se encuentra aquí: https://oeis.org/A005169
fuente
Julia,
4443 bytesEsto utiliza la fórmula recursiva en OEIS.
Explicación
¿Alguien más se ha dado cuenta de que el strike 44 es regular 44?
fuente
Python 3, 88 bytes
fuente
JavaScript (ES6), 63
Implementando la fórmula recursiva en la página OEIS
fuente