Eu gostei de ler este site; Esta é a minha primeira pergunta. As edições são bem-vindas.
Dados inteiros positivos n e m , calcule todas as partições ordenadas de m em exatamente n partes partes inteiras positivas e imprima-as delimitadas por vírgulas e novas linhas. Qualquer ordem é boa, mas cada partição deve aparecer exatamente uma vez.
Por exemplo, dado m = 6 en = 2, as partições possíveis são pares de números inteiros positivos que somam 6:
1,5
2,4
3,3
4,2
5,1
Note que [1,5] e [5,1] são partições ordenadas diferentes. A saída deve estar exatamente no formato acima, com uma nova linha à direita opcional. (EDIT: A ordem exata das partições não importa). A entrada / saída é via E / S de código-golfe padrão .
Outro exemplo de saída para m = 7, n = 3:
1,1,5
1,2,4
2,1,4
1,3,3
2,2,3
3,1,3
1,4,2
2,3,2
3,2,2
4,1,2
1,5,1
2,4,1
3,3,1
4,2,1
5,1,1
O menor código em bytes após 1 semana vence.
Novamente, edite se necessário.
Termo aditivo:
O @ TimmyD perguntou qual o tamanho da entrada inteira que o programa suporta. Não há um mínimo rígido além dos exemplos; de fato, o tamanho da saída aumenta exponencialmente, modelado aproximadamente por: lines = e ^ (0,6282 n - 1,8273).
n | m | lines of output
2 | 1 | 1
4 | 2 | 2
6 | 3 | 6
8 | 4 | 20
10 | 5 | 70
12 | 6 | 252
14 | 7 | 924
16 | 8 | 3432
18 | 9 | 12870
20 | 10 | 48620
22 | 11 | 184756
24 | 12 | 705432
Respostas:
Pitão, 14 bytes
Experimente on-line: Demonstration or Test Suite
Explicação:
fonte
jjL\,fqsTQ^SQE
.Python 3, 77 bytes
Uma função recursiva que cria cada sequência de saída e a imprime. Tenta todos os primeiros números possíveis, recorrendo para baixo para encontrar uma solução com a soma diminuída correspondente
n
e um summand a menosm
e um prefixo de seqüências
com esse número. Se a soma necessária e o número de termos forem iguais a 0, atingimos a marca e imprimimos o resultado, cortando a vírgula inicial. Isso é verificado comom|n
sendo 0 (Falsey).79 caracteres no Python 2:
fonte
CJam, 22 bytes
Experimente on-line no intérprete CJam .
Como funciona
fonte
Pitão,
2018 bytes-2 bytes por @Dennis!
Isso leva
n
como a primeira linha de entrada em
como a segunda.Experimente aqui .
fonte
Haskell, 68 bytes
Exemplo de uso:
Como funciona:
sequence $ replicate n list
cria todas as combinações den
elementos desenhados da formalist
. Levamos tudo issox
de[1..m]
onde ossum
iguaism
.unlines
einit$tail$show
produza o formato de saída necessário.fonte
Dyalog APL , 33 bytes
Toma
m
como argumento à esquerda,n
como argumento à direita.Quase metade (entre
{
e⍺
) é para a formatação necessária.fonte
Mathematica, 65 bytes
IntegerPartitions
faz a tarefa. O restante é apenas para pedir as tuplas e formatar o resultado.fonte
Python 3, 112
Não administro um liner há algum tempo. :)
fonte
Python 2.7,
174170152 bytesResposta gorda. Pelo menos é legível :)
fonte
>
, depoisreplace
e depois da vírgula.Julia, 105 bytes
Essa é uma função que lê dois argumentos inteiros e grava os resultados em STDOUT com um único avanço de linha à direita.
Ungolfed:
fonte
Perl 6 , 54 bytes
Se a saída pudesse ser uma lista de listas
Do jeito que está escrito, tenho que adicionar um
join
no lambda.fonte