Ao fazer levantamento de peso, quero fazer um peso específico, anexando várias placas a uma barra.
Eu tenho as seguintes placas:
- 6 placas de 1 kg cada
- 6 placas de 2,5 kg cada
- 6 placas de 5 kg cada
- 6 placas de 10 kg cada
A barra em si pesa 10 kg.
Só é permitido fixar as placas em pares - elas são fixadas em cada extremidade da barra e o arranjo nas duas extremidades deve ser completamente simétrico (por exemplo, fixando duas placas de 5 kg em uma extremidade e uma placa de 10 kg em a outra extremidade é proibida por razões de segurança).
Faça um programa ou uma função que me diga quantas placas de cada tipo eu tenho que usar para obter um determinado peso total. A entrada é um número inteiro maior que 11; a saída é uma lista / matriz / sequência de 4 números. Se for impossível combinar placas existentes para obter o peso desejado, produza uma matriz zero / vazia, uma sequência inválida, lance uma exceção ou algo parecido.
Se houver várias soluções, o código deverá gerar apenas uma (não faça o usuário escolher - ele está ocupado demais com outras coisas).
Casos de teste:
12 -> [2 0 0 0] - 2 plates of 1 kg plus the bar of 10 kg
13 -> [0 0 0 0] - a special-case output that means "impossible"
20 -> [0 0 2 0] - 2 plates of 5 kg + bar
20 -> [0 4 0 0] - a different acceptable solution for the above
21 -> [6 2 0 0] - 6 plates of 1 kg + 2 plates of 2.5 kg + bar
28 -> [0 0 0 0] - impossible
45 -> [0 2 6 0] - a solution for a random number in range
112 -> [2 4 6 6] - a solution for a random number in range
121 -> [6 6 6 6] - maximal weight for which a solution is possible
Se o seu código exibir os números na ordem oposta (da placa pesada para a leve), especifique isso explicitamente para evitar confusão.
fonte
Respostas:
Gelatina , 22 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
MATL ,
2928 bytesPara entradas que não têm solução, isso produz uma saída vazia (sem erro).
Experimente online!
Explicação
fonte
Mathematica, 70 bytes
Função anônima. Pega um número como entrada e gera uma lista ou erros e retorna
{}[[1]]
se não houver solução.fonte
Gelatina, 25 bytes
Experimente aqui.
fonte
2,5,10,20
->2,5,⁵,20
,
uma díade? Minha vida inteira é uma mentira,
é um díade, mas também pode ser usado para literais.2,5,⁵,20
não é um embora literal (2,5
e20
são, mas,
,⁵
e,
são átomos), então você precisa de algo para combinar as ligações.Python 3, 112 bytes
Uma função anônima que recebe entrada, via argumento, da massa alvo e retorna o número de cada placa como uma lista. Se não houver solução, será gerado um erro. Isso é pura força bruta.
Como funciona
Experimente no Ideone
fonte
Braquilog , 50 bytes
Retorna
false
quando não é possível.fonte
Pitão,
343125 bytesSuíte de teste.
Erros na impossibilidade.
Isso é essencialmente uma força bruta.
Isso é bastante rápido, uma vez que existem apenas 256 arranjos possíveis.
fonte
Scala, 202 bytes
Decidiu que Scala não recebe muito amor aqui, por isso apresento uma solução (provavelmente não ótima) em Scala.
O programa é gerado na ordem inversa e com lixo extra comparado às soluções postadas. Quando uma solução não é encontrada, imprime 0.
Nota: eu poderia não remover qualquer uma das novas linhas ou espaços porque Scala é mudo, então eu acho que para reduzir o tamanho, o método deve ser refeito a menos que eu perdi alguma coisa óbvia.
fonte
APL, 40 bytes
Em ⎕IO ← 0. Em inglês:
10+2×,∘.+⌿1 2.5 5 10∘.×⍳4
: crie a matriz de todos os pesos possíveis, calculando a soma externa 4D dos pesos por tipo de peso;⍵⍳⍨
: pesquisa o índice do dado. Se não encontrado, o índice é 1 + a contagem da matriz na etapa 1;(4⍴4)⊤
: representa o índice na base 4, ou seja, calcula a coordenada da massa especificada no espaço 4D;2×
: leve o resultado ao espaço do problema, onde as coordenadas devem ser interpretadas como metade do número de placas.Exemplo: {2 × (4⍴4) ⊤⍵⍳⍨10 + 2 ×, +. + / ↓ 1 2,5 5 10∘. × ⍳4} 112 2 4 6 6
Bônus : como o APL é uma linguagem de matriz, vários pesos podem ser testados ao mesmo tempo. Nesse caso, o resultado é transposto:
fonte
JavaScript (ES6), 109 bytes
Retorna
00-2
por erro. Solução alternativa que retornaundefined
com erro, também 109 bytes:fonte