Empaqueter

On dispose d’un ensemble d’objets dont on connaît, pour chacun, la masse. On souhaite ranger l’ensemble de ces objets dans des boites identiques de telle manière que la somme des masses des objets contenus dans une boîte ne dépasse pas la capacité c de la boîte. On souhaite utiliser le moins de boîtes possibles pour ranger cet ensemble d’objets.

Pour résoudre ce problème, on utilisera un algorithme glouton consistant à placer chacun des objets dans la première boîte où cela est possible.

Par exemple, pour ranger dans des boîtes de capacité c = 5 un ensemble de trois objets dont les masses sont représentées en Python par la liste [1, 5, 2], on procède de la façon suivante :

  • Le premier objet, de masse 1, va dans une première boite.
  • Le deuxième objet, de masse 5, ne peut pas aller dans la même boite que le premier objet car cela dépasserait la capacité de la boite. On place donc cet objet dans une deuxième boîte.
  • Le troisième objet, de masse 2, va dans la première boîte.

On a donc utilisé deux boîtes de capacité c = 5 pour ranger les 3 objets.

Compléter la fonction Python empaqueter(liste_masses, c) suivante pour qu’elle renvoie le nombre de boîtes de capacité c nécessaires pour empaqueter un ensemble d’objets dont les masses sont contenues dans la liste liste_masses.

Exemples

Python Console Session
>>> empaqueter([1, 2, 3, 4, 5], 10)
2
>>> empaqueter([1, 2, 3, 4, 5], 5)
4
>>> empaqueter([7, 6, 3, 4, 8, 5, 9, 2], 11)
5
Compléter le code ci-dessous

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.1280137w4xh)1(+5-,_js3u:/S[ bqn=îéve08imtP]R69p2drg;ylckfao050R0E0J0!0H0W0p0w0X0W0!0p0p0A010J0H0P010406050p0r0I0I0!0S0V040u0#0W0r0_0#0z050t101214160~0P04051m1f1p0t1m0~0R0H0D0.0:0=0@0:0z0T0r0!0T0E0l0P0V0J0f1d0w0f0H0T0f0W1R0f0J0|050)0x0W0E1y0;0?011Q1S1U1S0J1!1$1Y0J0S1n1M0.190p0P0!0z0@0Q011(1A010Z0+0E0z0!0I0E1Y1}1 241*271$2a2c0|0a0w0K0S0#0P0#0p0H1c0z0w0%1{0S0S0E0X2x1f2f0z1n0t1M2K1@1_1^1Z0R2h1B0H0z292u1Y1v1x0/1)2U2W0z0#2!1Y0P2D1n2I2K2;0 1~2y2$252*0S130W1Y0!1P2D0Z0@030n0n0X2+0E1U2)0#0l0h3f0|0w0h1f0!2=2^0}2@2g2`1*2|2~30320E340136383a3c2X3f0l22040w0Q3l3n1 3p2I2T013u0!2 1n310f333537390%3E2*3G0q3i0q3M2H3o0~3Q3s0@3T3V053X3Z3A3#3D2V3F3g0d3i0d3.1g3:3q2_1z3t0#2}3U3w3Y3y3!3C3%403)3g0k3i0k462;3;2^3R3^4g3|3B3$3b4m3e3g0N3i0N4s483=4b3@4d3v3W3x3z4A3 3d3G0b3i0b4J3O4u3r4M3S4O4f4Q4h4S3~4l4V3g0G3i0G4!2J4$4a2%4)4e3_3{4i3}4k4C4;0l0O3i0O4_3P4v3?4~4P3`4R4j4B3(4E3f0F0|0h0F5b4{4w4*505i535k4D3G0h0h5p3k0t3m3/4#495u4 4y524T4:413f3I0h3L5G3N4`5K5e4x4,4z4/555R0h3+045+5s5Z4(5#5h4-5j4U5*435-455W5I5Y4L4}5=514.545l5B4p5-4r5~475J612{5v5N655z560h4G5-4I6c2?1s2/1f2!2N0R1_2S5e4B2Z1w1n2.0E2:3o5 1n4B6H2g0H0R0@372I5B3w6O6Q665A3g5D0w2l0E6W6k5*1Y5~6f1*0Y0|0%0Z6J5:4}0c3i6?6-3@0Z0|0E0I1~0y0r0(0E0S6{5d4(0{040i784%620|1U0p0J0E0n130=0E0p7e4|257b0m6J0w6@2{0|0X7r3R7b0g0s6J0~6d2J5K6V016R2^3G3I5h7M5(673g226#2b6%7N6X567R6,796^3i0w7-7C5e0p0R0|017@0M290D0#0H1%1$6#0#0I0x2D0w0I2V0H2~2z1%0x0#0B7k0-0z0C0X7p0p0*2D0-2t0r777J3p8s7L6P7#6S3g5,7S8w7U6Y0l3+7Y2c6(5_4n8F6+5H6|017;7,7-7072747k0S0w1$0-0#0x0o0(0-2A0:8Z0H7j7~8.7k7m1)7p0m0w8l0X0f1 0J7H7C7T0n8y0l5{8B8J5Q8L438H7!8D56967)7f258R3J7-0w731%8|0!9o0w8c8e1%0P0E1b1{0z7k0z0H8Y0!0r850!0e88110.0w0Y0+0#0T0S2b2c0p7@01908u3Q929469977#6)8L4p9c985)9,8N8t2?9#8C937P4F6U9_9+5m4G9.9*8Ka09=9m7x8P0z0|1e8sa87*250#0|0A7w7y3t0x7h297/7a0|7d9!af3t7h8;7l7n0p7paq4}7E9Z9@4v9$9{0l4X4Q929 4W236$9/7VaLa69mal3@ab0x0n8c2waCadaY01ah04aja*8P860|5r8s7IaH6N9_944?aN9~a43G4?a29e5Ra~3Ma7a+aa04a%8fak8Pa-a/2;ae9i1*7b0vbfav0@a=04a@bja+6/040Z4dbpblaZ040nbB7s1*0#6_042VbG4wan049T1D0EaD7tasbUaw04aca`bH0@aFa:bq017b0LaG6I9^6W9458a aT8E58b47$5Rb?b8aX8Pbxbz8rbva90|aAbTb)bCa,bKbMcab$3Sax8/8?7o7qaucb7b7Gada_b/aIa|aK5q9}b^6l5ob{aP6Z5o2K3ma7b9c6bLbN5ebhcM4(bsbu48cn2yaJ1 5B5Db@a3995m5CaR7Zcz5*cZb cIbkcgbx0c1Q1$cP7gcLcf3Ra-020W0J0Uc_7zbZa#bda)c5b*bJ0|1 0Rd3bYd7cmb#7D0|bocU4w0|0HbXb%0|b-c|cN0|0jdfbDc8dza,0|020Td1dCbb7Bdn5ecp7wcs3O8vb;cw7R31aOb16Z7XaSc#9:c%7(cHc/cIbadpdCcOdv5;d-d:4}a-dyd?25bs5F4t91cvcX6Z8AdVb0c$5B8Gd!b58L5+aWc/bwdp6=d`bYdqei0@bhbi3oc:dod5a$7|bedLar04cqd~dncW0z5B96e4c+eb9be9b|eIedd*7.cK0zd6eud8epa+d/d9cbbbeReta(dieVbgdxdCd|b.dQb:8xcw9(eGd#aU0h9-eKcD3f9(5WeOd,bceTe(e/b*bndrchc{djdMdtd.aidI0|dhf9f8ewc`ekfcexdueYcgd^fh04dBcrd dSe13f6n9)eac%a1e|dXfCeNefbQ0(8qb!e)b*e!eSe%e.7K0t6L1q6t0t6v1f0J6xf(2Q2L0!1#6G6u6D7I0%0)0+0p04.