Pépites de code
C'est une situation hypothétique où c'est vendredi soir, et vous avez invité les copains de golf habituels à participer à votre passe-temps préféré: le golf à code. Cependant, comme il s'agit d'une tâche épuisant pour le cerveau, vous devez ramasser de la nourriture pour le cerveau du groupe afin de pouvoir jouer au golf autant que possible en dehors de votre code.
Maintenant, la collation préférée de tout le monde est les pépites de poulet, mais il y a un problème: il n'y a pas de paquet unique qui couvre les besoins de chacun. Donc, comme vous êtes déjà d'humeur golfique, vous décidez de créer un programme qui détermine exactement quels packs vous devez acheter pour pouvoir couvrir les besoins de chacun.
Les tailles de pépites de poulet sont partout, et selon l'endroit où vous vivez dans le monde, les tailles standard changent également. Cependant, [l'endroit qui sert les pépites] le plus proche stocke les tailles suivantes de packs de pépites :
4, 6, 9, 10, 20, 40
Vous pouvez maintenant remarquer que vous ne pouvez pas commander certaines combinaisons de pépites. Par exemple, les 11pépites ne sont pas possibles, car il n'y a pas de combinaison 11exactement égale . Cependant, vous pouvez faire 43en obtenant 1 pack de 20, 1 pack de 10, 1 pack de 9et 1 pack de 4,
20 + 10 + 9 + 4 = 43 (597)
où 597chaque terme est quadrillé et additionné (indice: la solution optimale a cette valeur la plus élevée) . Il existe bien sûr d'autres façons de fabriquer 43, mais comme vous le savez, plus il y a de pépites par paquet, moins c'est cher par pépite. Ainsi, vous souhaitez idéalement acheter le moins de packs et en plus grandes quantités pour minimiser vos coûts.
La tâche
Vous devez créer un programme ou une fonction qui prend une liste d'entiers correspondant aux exigences de chaque personne. Vous devez ensuite calculer et imprimer la commande α la plus rentable pour acheter les pépites de poulet. L' ordre α le plus rentable est la combinaison par laquelle la somme des carrés de chaque quantité est la plus élevée. S'il n'y a absolument aucun moyen d'acheter les pépites parfaitement, vous devez imprimer une valeur falsy telle que 0, False, Impossible!ou tout ce qui est disponible dans votre langue.
Exemple d'E / S:
[2 7 12 4 15 3] => [20 10 9 4]
1, 1, 2, 1 => False
6 5 5 5 5 5 9 => 40
[6, 4, 9] => 9 10
1 => 0
199 => 40, 40, 40, 40, 20, 10, 9
2 => Impossible!
Voici la liste des solutions idéales pour les 400 premiers. Notez que celles-ci ne sont pas formatées comme je m'y attendrais, chacune tupleest sous la forme (N lots of M).
Règles
- Pas de failles standard.
- Aucune utilisation des fonctions intégrées qui effectuent la totalité ou la majorité de la tâche, comme
FrobeniusSolvedans Mathematica.
α - Pour clarifier cela avec un exemple, vous pouvez également faire 43 en faisant 4 + 6 + 6 + 9 + 9 + 9 = 43 (319), mais ce ne serait pas optimal, et donc une sortie incorrecte, car la somme des carrés est inférieure à la combinaison que j'ai notée dans l'introduction. Essentiellement, somme de carrés plus élevée = coût inférieur = plus rentable.