Meu trabalho é empilhar pedras em pilhas triangulares. Eu só faço isso há um século e já é bem chato. A pior parte é que eu rotulo cada pilha. Eu sei como decompor pedras em pilhas de tamanho máximo , mas quero minimizar o número de pilhas. Você pode ajudar?
Tarefa
Dado um número inteiro, decomponha-o no número mínimo de números triangulares e produza esse número mínimo.
Números triangulares
Um número triangular é um número que pode ser expresso como a soma dos primeiros n
números naturais, por algum valor n
. Assim, os primeiros números triangulares são
1 3 6 10 15 21 28 36 45 55 66 78 91 105
Exemplo
Como exemplo, digamos que a entrada seja 9
. Como não é um número triangular, não pode ser expresso como a soma do 1
número triangular. Assim, o número mínimo de números triangulares é 2
, que pode ser obtido com [6,3]
, produzindo a saída correta de 2
.
Como outro exemplo, digamos que a entrada seja 12
. A solução mais óbvia é usar um algoritmo ganancioso e remover o maior número triangular de cada vez, produzindo [10,1,1]
e produzindo 3
. No entanto, existe uma solução melhor:, [6,6]
produzindo a saída correta de 2
.
Casos de teste
in out
1 1
2 2
3 1
4 2
5 3
6 1
7 2
8 3
9 2
10 1
11 2
12 2
13 2
14 3
15 1
16 2
17 3
18 2
19 3
20 2
100 2
101 2
5050 1
Regras
- O número inteiro de entrada está entre 1 e o número máximo máximo do seu idioma.
- Posso imitar qualquer idioma com meus seixos e quero que seu código seja o menor possível, porque não tenho nada além de seixos para acompanhá-lo. Portanto, este é o código-golfe , portanto o código mais curto em cada idioma vence.
fonte
n = 12
).Respostas:
Retina ,
5749 bytesExperimente online! Com base na minha resposta para três números triangulares . Mude a terceira linha para
^(^1|1\1)*$
para suportar a entrada zero. Edit: Salvo 8 (mas provavelmente deve haver mais) bytes graças a @MartinEnder.fonte
1
no segundo estágio, nem de grupo1
nem3
no terceiro estágio.((?(2)1\2|1))
pode ser reduzido para(1(?(2)\2))
.^((?<2>)(1\2)+){2}$
. Ou^(()(?<2>1\2)+){2}$
se você preferir.Mathematica, 53 bytes
Este código é muito lento. Se você deseja testar esta função, use a seguinte versão:
Experimente na Wolfram Sandbox
Explicação
fonte
Gelatina ( garfo ), 9 bytes
Isso depende de uma bifurcação, na qual implementei um átomo de solução Frobenius ineficiente. Não posso acreditar que já faz um ano desde que eu o toquei pela última vez.
Explicação
fonte
R ,
6958 bytesExperimente online!
Explicação:
fonte
Gelatina , 15 bytes
Experimente online!
fonte
JavaScript (ES6),
756361 bytesQuão?
Usamos as seguintes propriedades:
Dado um número inteiro positivo n , basta testar se podemos encontrar:
Se ambos os testes falharem, n deve ser a soma de 3 números triangulares.
Casos de teste
Mostrar snippet de código
fonte
MATL , 15 bytes
Experimente online!
Explicação
fonte
Kotlin ,
176154 bytesSubmissão
Embelezado
Teste
TryItOnline
fonte