Uma fonte é o arranjo de moedas em linhas, de modo que cada moeda toque duas moedas na linha abaixo dela, ou esteja na linha inferior e a linha inferior seja conectada. Aqui está uma fonte de 21 moedas:
Seu desafio é contar quantas fontes diferentes podem ser feitas com um determinado número de moedas.
Você receberá como entrada um número inteiro positivo n
. Você deve n
gerar o número de fontes de moedas diferentes que existem.
Regras de E / S padrão, brechas padrão proibidas. As soluções devem poder calcular n = 10
em menos de um minuto.
Saída desejada para n = 1 ... 10
:
1, 1, 2, 3, 5, 9, 15, 26, 45, 78
Esta sequência é OEIS A005169 .
Isso é código de golfe. Menos bytes ganha.
code-golf
sequence
combinatorics
isaacg
fonte
fonte
n
para a qual o programa deve estar garantido para funcionar? (ou seja, após o qual ele pode se romper)n
, até limitações do tipo de dados, hardware, etc.Respostas:
Python, 57 bytes
Como observado em OEIS , se você alternar cada linha meia etapa em relação à linha abaixo dela, os tamanhos das colunas formarão uma sequência de números inteiros positivos com uma etapa máxima máxima de 1.
A função
f(n,i)
conta as seqüências com soman
e último númeroi
. Eles podem ser somados recursivamente para cada escolha do tamanho da próxima coluna de1
ai+1
, que érange(1,i+2)
. Truncar pararange(1,i+2)[:n]
impedir que as colunas usem mais moedas do que as restantes, evitando precisar dizer que as negativasn
dão0
. Além disso, evita um caso base explícito, já que a soma vazia é0
e não se repete, masf(0)
precisa ser configurada como1
, para a qualor 1
é suficiente (como seria+0**n
).fonte
M|sgL-Gd<ShHG1gQ0
Mathematica, 59 bytes
Baseado no programa Mathematica no OEIS de Jean-François Alcover.
fonte
1/(1-x/(1-x^2/(1-x^3/(1-x^4/(1-x^5/(...))))))
.Haskell,
6048 bytesObrigado à @nimi por fornecer uma solução bem mais curta!
Versão antiga.
A função que calcula o valor é a
s
implementação da fórmula recursiva encontrada aqui: https://oeis.org/A005169fonte
t (n-p) q
. Golfe dicas: usar um operador infix parat
, trocar os guardas e usarmap
em vez da compreensão da lista:n#p|p>n=0|p<n=sum$map((n-p)#)[1..p+1]|1<2=1
.s
torna-ses=(#1)
, mas você não precisa atribuir um nome à função principal, o que(#1)
é suficiente. 48 bytes.#
e$
aqui em primeiro lugar =)#
é uma função infix definido pelo usuário como+
,*
, etc. são predefinidas funções infixas.$
é outra maneira de ajustar a precedência (além dos parênteses)f (g (h x))
->f$g$h x
ou, no nosso casosum(map(...)[...])
->sum$map(...)[...]
.Haskell, 43 bytes
Vejo resposta do Python para explicação.
Mesmo comprimento com
min
e nãotake
:fonte
Pitão,
2120 bytesExperimente online. Suíte de teste.
Esta é uma implementação direta da fórmula recursiva na página OEIS , como a resposta do Matlab .
fonte
Matlab,
115105 bytesImplementação da fórmula recursiva encontrada aqui: https://oeis.org/A005169
fonte
Julia,
4443 bytesIsso usa fórmula recursiva no OEIS.
Explicação
Alguém mais notou que o strike através do 44 é 44 regular ??
fonte
Python 3, 88 bytes
fonte
JavaScript (ES6), 63
Implementando a fórmula recursiva na página OEIS
fonte