OEIS A000009 conta o número de partições estritas dos números inteiros. Uma partição estrita de um número inteiro não negativo n
é um conjunto de números inteiros positivos (portanto, nenhuma repetição é permitida e a ordem não importa) que somam isso n
.
Por exemplo, 5 tem três partições rígidas: 5
, 4,1
, e 3,2
.
10 tem dez partições:
10
9,1
8,2
7,3
6,4
7,2,1
6,3,1
5,4,1
5,3,2
4,3,2,1
Desafio
Dado um número inteiro não negativo n
<1000, produza o número de partições estritas que possui.
Casos de teste:
0 -> 1
42 -> 1426
Aqui está uma lista dos números de partição estritos de 0 a 55, do OEIS:
[1,1,1,2,2,3,4,5,6,8,10,12,15,18,22,27,32,38,46,54,64,76,89,104,122,142,165,192,222,256,296,340,390,448,512,585,668,760,864,982,1113,1260,1426,1610,1816,2048,2304,2590,2910,3264,3658,4097,4582,5120,5718,6378]
Isso é código-golfe , então a solução mais curta em bytes vence.
fonte
subsequences
(+import
) na minha resposta, mas não obtive sucesso até agora.ES6, 64 bytes
Trabalhos por subtração de teste recursivo.
k
é o número que foi subtraído pela última vez e o próximo número a ser subtraído deve ser maior (mas não tão grande que um número ainda maior não possa ser subtraído). 1 é adicionado porque você sempre pode subtrair an
si próprio. (Além disso, como isso é recursivo, tenho que cuidar para que todas as minhas variáveis sejam locais.)fonte
Python, 68 bytes
Apenas chame a função anônima passando o número inteiro não negativo
n
como argumento ... e aguarde o fim do universo.fonte
n>0
, você salvar um byte e ir mais rápido (eu acredito que você recurse em números negativos): Preturn sum(...)if n else 1
Python 2, 49 bytes
Os ramos de recursão em cada summand potencial
k
de1
paran
decidir se devem ser incluídas. Cada somamand incluída é subtraída da soma desejadan
e, no final, sen=0
permanecer, esse caminho é contado.fonte
Haskell, 43 bytes
A função binária
n%k
conta o número de partições estritas den
em partes com uma parte máximak
, portanto a função desejada éf n=n%n
. Cada valork
pode ser incluído, o que diminuin
pork
, ou excluídas, e de qualquer forma o novo máximok
é uma inferior, dando a recursividaden%k=n%(k-1)+(n-k)%(k-1)
.fonte
n%k|q<-k-1=n%q+(n-k)%q
shaves um byte fora da linha 3.Julia, 53 bytes
Esta é uma função anônima que aceita um número inteiro e retorna um número inteiro. Para chamá-lo, atribua-o a uma variável.
Nós obtemos as partições inteiras usando
partitions
,filter
somente para aqueles com summands distintos,collect
em uma matriz e encontramos o último índice (ou seja, o comprimento) usandoendof
.fonte
Haskell, 58 bytes
Exemplo de uso:
map h [0..10]
->[1,1,1,2,2,3,4,5,6,8,10]
.É uma abordagem simples de força bruta. Verifique as somas de todas as subsequências de
1..x
. Isso funcionax == 0
também porque todas as subsequências de[1..0]
são[[]]
e a soma de[]
é0
.fonte
05AB1E , 8 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
05AB1E , 5 bytes
Experimente online!
Nota: isso é extremamente lento e atingirá o tempo limite de entradas maiores que cerca de 20.
Explicação:
fonte