Era una calda serata estiva ...
quando la mia stupida macchina decise di guastarsi in mezzo alla strada mentre tornavo dal supermercato. L'ho spinto a bordo campo e ho deciso di tornare a casa. Ho aperto il bagagliaio per portare fuori la spesa e le cose rimanenti. Fu allora che notai che gli articoli non erano stati insaccati in modo uniforme. Alcune borse avevano oggetti più pesanti mentre altre avevano poche cose più leggere - alcune addirittura avevano un mix di tali oggetti. Per facilitarne il trasporto, ho deciso di raggruppare tutto in due borse e di mettere i pesi il più vicino possibile.
Il tuo obiettivo
è aiutarmi a riorganizzare gli articoli in due borse della spesa in modo tale che la differenza tra le due borse sia il più vicino possibile allo zero.
Matematicamente:
PESO MANO SINISTRA - PESO MANO DESTRA ≈ 0
Esempio
Se avessi solo 2 articoli, Pane e burro di arachidi, e il peso del pane fosse di 250 grammi e il burro di arachidi è di 150 grammi, il modo migliore è portarli separatamente in due mani.
W LH - W RH = W (PANE) - W (P.BUTTER) 250-150
= 100
L'altra possibilità è:
W (BREAD, P.BUTTER) - W (mano vuota) = (250 + 150) - 0 = 400
Questo non è meglio del nostro primo caso, quindi dovresti andare con il primo.
Il tuo codice dovrebbe
- accetta input di numeri che indicano i pesi degli articoli nel carrello. Le unità non sono importanti, ma dovrebbero essere le stesse (idealmente chilogrammi o grammi). L'input può essere fatto uno per uno o tutti contemporaneamente. Se lo desideri, puoi limitare il conteggio totale a un massimo di 20 articoli.
- Il formato / tipo di input dipende da te, ma nient'altro dovrebbe essere presente oltre ai pesi.
- È consentita qualsiasi lingua, ma attenersi alle librerie standard.
- Visualizza output. Ancora una volta, sei libero di scegliere il formato, ma spiega il formato nel tuo post. cioè, come possiamo sapere quali sono gli oggetti per la mano sinistra e quali sono gli oggetti per la mano destra.
Punti
- Il codice più corto vince.
Suggerimento
I due possibili algoritmi a cui potrei pensare sono la differenziazione (più veloce) e le permutazioni / combinazioni (più lente). È possibile utilizzare questi o altri algoritmi che svolgono il lavoro.