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 nfuentes de monedas diferentes que existen.
Reglas estándar de E / S, lagunas estándar prohibidas. Las soluciones deberían poder calcularse n = 10en 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


npara 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 sumany último númeroi. Estos se pueden sumar recursivamente para cada elección del siguiente tamaño de columna de1ai+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 negativosndan0. Además, evita un caso base explícito, ya que la suma vacía es0y no es recurrente, perof(0)debe establecerse en su1lugar, para lo cual esor 1suficiente (como lo haría+0**n).fuente
M|sgL-Gd<ShHG1gQ0Mathematica, 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
simplementació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 utilizarmapen lugar de la lista por comprensión:n#p|p>n=0|p<n=sum$map((n-p)#)[1..p+1]|1<2=1.sse 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 xo en nuestro casosum(map(...)[...])->sum$map(...)[...].Haskell, 43 bytes
Ver la respuesta de Python para obtener una explicación.
Misma longitud con
minmá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