proposition correction algo rangement
objets=[3,7,6,3,4,8,5,9,2,2]
carton_max=11
nbre_cartons=5
# avec boucles for
def rangement(objets):
'''
>>>rangement(objets)
[[3, 7], [6, 3, 2], [4, 5, 2], [8], [9]]
'''
cartons=[[] for i in range(nbre_cartons)]
for objet in objets:
ranger=False
for carton in cartons:
if ranger==False:
poids_carton=0
for obj in carton:
poids_carton+=obj
if poids_carton+objet<=carton_max:
carton.append(objet)
ranger=True
print(cartons)
return cartons
# avec boucles while
def rangement2(objs):
objets=objs.copy()
cartons=[[] for i in range(nbre_cartons)]
while objets!=[]:
objet=objets[0]
carton_dispo=False
i=0
while carton_dispo==False:
# on cherche un carton dispo
carton=cartons[i]
poids=0
for obj in carton:
poids+=obj
if poids+objet<=carton_max:
carton.append(objet)
objets.remove(objet)
carton_dispo=True
else:
i+=1
print(cartons)
return cartons
# correction algo du kp
poids_max=30
# objets valeur et poids
objets=[[70,13],[40,12],[30,8],[30,10]]
def calcul_densite(objets):
'''
>>>calcul_densite(objets)
[5.4,3.3,3.7,3]
'''
densite=[]
for val in objets:
d=round(val[0]/val[1],1)
densite.append(d)
return densite
def classe_densite_decroissant(objets):
'''
>>>classe_densite_decroissant(objets)
[[70,13],[30,8],[40,12],[30,12]]
'''
obj_classes=[]
obj_a_classer=objets.copy()
densites=calcul_densite(objets)
# tant qu'il y a des objets à classer
while len(obj_a_classer)>0:
# je cherche la densite la plus elevée et son indice
d_max=densites[0]
i_max=0
for i in range(len(densites)):
if densites[i]>d_max:
d_max=densites[i]
i_max=i
# vous ajoutez l'objet correspondant aux objets classés
obj_classes.append(obj_a_classer[i_max])
# vous supprimez la densite max et l'objet
del densites[i_max]
del obj_a_classer[i_max]
return obj_classes
def kp(objets):
'''
applique la methode du kp aux objets
>>>kp(objets)
[[70,13],[30,8]]
'''