Mini-projet : Attente au restaurant

Un restaurant de 50 tables à 2 couverts ouvre ses portes pendant 4 heures chaque soir.
L’intervalle de temps entre l’arrivée de 2 groupes de clients est d’environ 2 minutes.
Les groupes sont constitués aléatoirement de 2 à 6 convives.
Les tables peuvent être rassemblées pour les groupes de plus de 2 personnes.
Lorsqu’un groupe arrive, il attend que des tables en nombre suffisant soient libres.
Une fois assis, le groupe reste pendant une durée aléatoire comprise entre 60 et 120 minutes.
Simuler le fonction du restaurant pendant une soirée :
- Afficher le nombre de clients en attente et le nombre de clients assis à chaque minute
- Afficher le nombre de clients servis lors d’un service et le nombre moyen de clients par table.
Indications :
- Il faut choisir les structures de données que vous aller utiliser les différents éléments : comment allez-vous représenter : le temps, les tables, les clients, les clients qui mangent, les clients qui attendent, etc.
- Il faudra créer des fonctions ou méthodes (si vous utilisez la POO) qui vont générer un nouveau groupe de clients, affecter le nouveau groupe (table ou attente), affecter un groupe en attente à leur(s) table(s),
- N’oubliez pas les différentes zones pour que votre code soit clair :
Python
Coeur du programme :
- tant que le temps restant est positif :
- Pour chaque groupe à table :
- leur durée restante diminue
- si le groupe a fini de manger :
- on le retire de la liste des groupes à tables
- le nombre de tables dispos est actualisé
- Si la file d’attente n’est pas vide :
- on regarde le groupe prioritaire
- si le nombre de table disponibles permet de faire rentrer le groupe :
- le nombre de clients de la soirée augmente en conséquence
- le nombre de tables disponibles diminue en conséquence
- la liste des groupes en attente perd un groupe
- la liste des groupes a table gagne un élément
- Si le temps restant est impair :
- on crée un nouveau groupe qu’on ajoute à la file d’attente
- On peut (pas obligé) afficher les valeurs dans les différentes variables
- le temps restant diminue de 1 minute
- Pour chaque groupe à table :
- On renvoie le nombre de clients total de la soirée
Initialisation des variables utilisées :
- temps_restant = 240
- nb_tables_dispo = 50
- liste_groupes_atable = []
- liste_groupes_attente = [Groupe()]
- nb_clients_soirée = 0