-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlouis_refactor.py
74 lines (52 loc) · 1.89 KB
/
louis_refactor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from random import *
def create_charges(number_of_charges: int, max_weight_charge: int) -> int:
"""Créer des charges aléatoires avec un poid maximum
Args:
number_of_charges (int): Nombre de charge
max_weight_charge (int): poids maximum d'une charge
Examples:
>> print(create_charges(5, 3))
[1,2,0,1,2]
"""
charges = []
for _ in range(number_of_charges):
charges.append(randint(1, max_weight_charge))
return sorted(charges)
def create_voyages(charges: list, max_weight: int, voyages=[]) -> list:
"""Retournes une liste de voyages
Il s'agit d'une fonction recursive !
Args:
charges (list): Listes des charges
max_weight (int): Description
"""
# On met le plus lourd au début ...
charges = [charges[-1]] + charges[:-1]
total = 0
# On parcourt du début à la fin
for i, val in enumerate(charges):
# Si le poids total depasse le seuil
# Alors on crée un voyage
if total + val > max_weight:
# Création d'un voyage
voyages.append(tuple(charges[:i]))
# On fait un appel recursive sur les valises restantes
charges = charges[i:]
create_voyages(charges, max_weight, voyages)
return voyages
else:
total += val
# La derniere valise qui reste ..
voyages.append(charges)
return voyages
if __name__ == "__main__":
max_weight_charge = 10
number_of_charges = 5
charges = create_charges(number_of_charges, max_weight_charge - 1)
print("Charges générées:", charges)
voyages = create_voyages(charges, max_weight=max_weight_charge)
for numero, voyage in enumerate(voyages):
print(
"Le voyage {} contient : {}, soit un total de : {} ".format(
numero, voyage, sum(voyage)
)
)