Lorsque je fais de l'haltérophilie, je veux faire un poids spécifique en attachant plusieurs plaques à une barre.
J'ai les plaques suivantes:
- 6 assiettes de 1 kg chacune
- 6 assiettes de 2,5 kg chacune
- 6 assiettes de 5 kg chacune
- 6 assiettes de 10 kg chacune
La barre elle-même pèse 10 kg.
Il est uniquement permis de fixer les plaques par paires - elles sont fixées à chaque extrémité de la barre, et la disposition aux deux extrémités doit être complètement symétrique (par exemple, en fixant deux plaques de 5 kg à une extrémité et une plaque de 10 kg à l'autre extrémité est interdite pour des raisons de sécurité).
Faites un programme ou une fonction qui me dit combien de plaques de chaque type je dois utiliser pour obtenir un poids total donné. L'entrée est un entier supérieur à 11; la sortie est une liste / tableau / chaîne de 4 nombres. S'il est impossible de combiner des plaques existantes pour obtenir le poids cible, sortez un tableau zéro / vide, une chaîne invalide, lancez une exception ou une telle.
S'il existe plusieurs solutions, le code ne doit en générer qu'une seule (ne faites pas choisir l'utilisateur - il est trop occupé par d'autres choses).
Cas de test:
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
Si votre code sort les nombres dans l'ordre inverse (de la plaque lourde à la plaque légère), veuillez le spécifier explicitement pour éviter toute confusion.
la source
Réponses:
Gelée , 22 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
MATL ,
2928 octetsPour les entrées qui n'ont pas de solution, cela produit une sortie vide (sans erreur).
Essayez-le en ligne!
Explication
la source
Mathematica, 70 octets
Fonction anonyme. Prend un nombre en entrée, et génère une liste ou des erreurs et renvoie
{}[[1]]
s'il n'y a pas de solution.la source
Gelée, 25 octets
Essayez-le ici.
la source
2,5,10,20
->2,5,⁵,20
,
une dyade? Toute ma vie est un mensonge,
est une dyade, mais elle peut également être utilisée pour les littéraux.2,5,⁵,20
n'est pas un littéral cependant (2,5
et le20
sont, mais,
,⁵
et,
sont des atomes), donc vous auriez besoin de quelque chose pour combiner les liens.Python 3, 112 octets
Une fonction anonyme qui prend en entrée, via un argument, la masse cible et renvoie le numéro de chaque plaque sous forme de liste. Si aucune solution n'existe, une erreur est levée. C'est de la force brute pure.
Comment ça fonctionne
Essayez-le sur Ideone
la source
Brachylog , 50 octets
Retourne
false
lorsque cela n'est pas possible.la source
Pyth,
343125 octetsSuite de tests.
Erreurs d'impossibilité.
Il s'agit essentiellement d'une force brute.
C'est assez rapide, car il n'y a que 256 dispositions possibles.
la source
Scala, 202 octets
Décidé que Scala n'a pas beaucoup d'amour ici, donc je présente une solution (probablement pas optimale) dans Scala.
Le programme sort dans l'ordre inverse et avec des ordures supplémentaires par rapport aux solutions en poste. Lorsqu'une solution n'est pas trouvée, imprime 0.
Remarque: Je n'ai pas pu supprimer les sauts de ligne ou les espaces car Scala est stupide, donc je pense que pour réduire la taille, la méthode doit être refaite à moins que je manque quelque chose d'évident.
la source
APL, 40 octets
Dans ⎕IO ← 0. En anglais:
10+2×,∘.+⌿1 2.5 5 10∘.×⍳4
: construire le tableau de tous les poids possibles, en calculant la somme externe 4D des poids par type de poids;⍵⍳⍨
: recherche l'index du donné. S'il n'est pas trouvé, l'indice est 1 + le décompte du tableau à l'étape 1;(4⍴4)⊤
: représente l'indice en base 4, c'est-à-dire calcule la coordonnée du poids donné dans l'espace 4D;2×
: amène le résultat à l'espace du problème, où les coordonnées doivent être interprétées comme la moitié du nombre de plaques.Exemple: {2 × (4⍴4) ⊤⍵⍳⍨10 + 2 ×, ⊃∘. + / ↓ 1 2,5 5 10∘. × ⍳4} 112 2 4 6 6
Bonus : comme APL est un langage de tableau, plusieurs poids peuvent être testés à la fois. Dans ce cas le résultat est transposé:
la source
JavaScript (ES6), 109 octets
Retourne
00-2
sur erreur. Solution alternative qui renvoieundefined
en cas d'erreur, également 109 octets:la source