Neste desafio, você receberá uma lista de pesos separados por vírgula como entrada, como
1,3,4,7,8,11
E você deve gerar a menor quantidade de pesos que puder adicionar a esse conjunto. Por exemplo, a saída para este conjunto seria
1,3,7
Porque você pode representar todos esses pesos com apenas esses três:
1 = 1
3 = 3
1+3 = 4
7 = 7
1+7 = 8
1+3+7 = 11
Pode haver mais de uma solução. Por exemplo, sua solução para a entrada 1,2
pode ser 1,1
ou 1,2
. Contanto que encontre a quantidade mínima de pesos que possa representar o conjunto de entradas, é uma solução válida.
Os pesos não podem ser usados mais de uma vez. Se você precisar usar um duas vezes, deverá produzi-lo duas vezes. Por exemplo, 2,3
não é uma solução válida para 2,3,5,7
porque você não pode usá-lo 2
duas vezes 2+2+3=7
.
A entrada é garantida para não ter números duplicados.
Este é o código-golfe, pelo que o código mais curto por contagem de caracteres vence.
O acesso à rede é proibido (por isso não é da sua "inteligentes" wget
soluções @JohannesKuhn tosse tosse );)
Casos mais simples:
1,5,6,9,10,14,15 => 1,5,9
7,14,15,21,22,29 => 7,14,15
4,5,6,7,9,10,11,12,13,15,16,18 => 4,5,6,7
2,3,5,7 => 2,2,3 or 2,3,7
E alguns mais complicados:
10,16,19,23,26,27,30,37,41,43,44,46,50,53,57,60,61,64,68,71,77,80,84,87
=> 3,7,16,27,34
20,30,36,50,56,63,66,73,79,86
=> 7,13,23,43
27,35,44,46,51,53,55,60,63,64,68,69,72,77,79,81,86,88,90,95,97,105,106,114,123,132
=> 9,18,26,37,42
7,7,7,8
acima), o que aumenta a complexidade em várias partes.
n
pesos de entrada e m
for o maior, enumere todas as subsequências de (1..m)
e para cada subsequência, enumere todas as combinações entre 1 e n
instâncias de cada elemento da sequência.)