Ce fut une chaude soirée d'été ...
quand ma stupide voiture a décidé de tomber en panne au milieu de la route sur le chemin du retour du supermarché. Je l'ai poussé à l'écart et j'ai décidé de rentrer à pied. J'ai ouvert le coffre pour sortir l'épicerie et le reste. C'est alors que j'ai remarqué que les articles n'étaient pas uniformément emballés. Certains sacs avaient des articles plus lourds tandis que d'autres avaient peu de choses plus légères - certains avaient même un mélange de ces articles. Pour me faciliter le transport, j'ai décidé de tout regrouper dans deux sacs et de faire leurs poids le plus près possible les uns des autres.
Ton but
est de m'aider à réorganiser les articles dans deux sacs de manière à ce que la différence entre les deux sacs soit aussi proche que possible de zéro.
Mathématiquement:
POIDS MAIN GAUCHE - POIDS MAIN DROITE ≈ 0
Exemple
Si je n'avais que 2 articles, du pain et du beurre d'arachide, et que le poids du pain est de 250 grammes et que le beurre d'arachide est de 150 grammes, la meilleure façon est de les transporter séparément à deux mains.
W LH - W RH = W (PAIN) - W (P.BUTTER) 250-150
= 100
L'autre possibilité est:
W (PAIN, BEURRE) - W (main vide) = (250 + 150) - 0 = 400
Ce n'est pas mieux que notre premier cas, vous devriez donc opter pour le premier.
Votre code devrait
- prendre des entrées de nombres indiquant le poids des articles dans le panier. Les unités ne sont pas importantes, mais elles devraient être les mêmes (idéalement des kilogrammes ou des grammes). L'entrée peut être effectuée une par une ou toutes en même temps. Vous pouvez limiter le nombre total à 20 articles maximum, si vous le souhaitez.
- Le format / type d'entrée est à vous de choisir, mais rien d'autre ne doit être présent autre que les poids.
- N'importe quelle langue est autorisée, mais respectez les bibliothèques standard.
- Afficher la sortie. Encore une fois, vous êtes libre de choisir le format, mais expliquez le format dans votre message. c'est-à-dire, comment pouvons-nous savoir lesquels sont des éléments de gauche et lesquels sont des éléments de droite.
Points
- Le code le plus court gagne.
Allusion
Les deux algorithmes possibles auxquels je pourrais penser sont la différenciation (plus rapide) et les permutations / combinaisons (plus lent). Vous pouvez utiliser ces algorithmes ou tout autre algorithme qui fait le travail.