Informations

Date limite 22/01/2026 17:00:00
Limite de soumission Pas de limite

Se connecter

[Q3] Affectation de tables dans un restaurant

L'objectif de cette question est d'écrire une fonction Python affecter_tables(tables, reservations) qui assigne des tables dans un restaurant à des réservations selon des règles simples.

Paramètres :

tables est une liste de tuples (numero_table, capacite), par exemple: [(10, 2), (11, 4), (12, 4), (13, 6)]

  • Les numéros de table sont uniques (entiers ≥ 1).
  • La capacité de chaque table est un entier ≥ 1.
  • La liste est ordonnée par capacité croissante de table.
  • Cette liste peut être vide si le restaurant ne possède aucune table.

reservations est une liste de tuples (nom, taille_groupe), par exemple: [("Alice", 2), ("Bob", 4), ("Chloé", 5), ("Dan", 4), ("Eve", 7)]

  • Le nom est un string représentant le groupe qui fait la réservation.
  • La taille_groupe est un entier ≥ 1.
  • Cette liste n'est pas nécessairement ordonnée par taille de groupe; les réservations sont traitées dans l’ordre d'occurrence dans la liste.
  • Si aucune réservation n'a été effectuée auprès du restaurant, cette liste sera vide.

Règles d’affectation de tables :

  1. Les groupes sont servis un par un dans l’ordre d'occurrence dans la liste de réservations.
  2. Pour un groupe donné, on choisit toujours la plus petite table encore disponible dont la capacité est au moins égale à la taille du groupe.
  3. Si plusieurs tables ont la même capacité, on prend la première dans la liste.
  4. Dès qu'une table est affectée elle ne peut plus être affectée à un autre groupe.
  5. Si aucune table disponible ne peut accueillir le groupe (capacité insuffisante ou plus de tables disponibles), le groupe est non servi.

Résultat :

La fonction doit renvoyer un dictionaire {nom: numero_table ou None, ...} ou nom est le groupe qui a fait la réservation et numero_table est soit la table affectée, soit None si ce groupe est non servi.

Votre fonction doit toujours renvoyer un dictionnaire (possiblement vide), et ce également dans le cas où aucune réservation n'a été effectuée et/ou que le restaurant n'a pas de tables disponibles / avec une capacité suffisante.

Exemple :

Supposons les données suivantes :

tables = [(21, 2), (31, 3), (32, 3), (41, 4)]
reservations = [("Frodon", 4), ("Elrond", 3), ("Pallando", 2), ("Sauron", 1), ("Nazgul", 9), ("Aragorn", 3)]

L'appel à la fonction affecter_tables(tables, reservations) devra donner le résultat suivant.

{
    "Frodon": 41,     # Plus petite table permettant d'accueillir ce premier groupe
    "Elrond": 31,     # Première table dans la liste ``tables`` acceptant ce groupe
    "Pallando": 21,   # Même logique que pour le groupe "Frodon"
    "Sauron": 32,     # Il faut une capacité ≥ taille du groupe et non occupée, la table ``32`` étant encore libre
    "Nazgul": None,   # Aucune table ne peut accueillir un groupe de cette taille
    "Aragorn": None   # Il n'y a plus aucune table de disponible
}

Les affectations de tables sont bien réalisées dans l'ordre d'arrivée. Cela empêche le groupe "Aragorn" de prendre la table de 3 restante (la n° 32) car celle-ci a déjà été attribuée au groupe "Sauron".


Question 1: Affectation de tables dans un restaurant

Fonction à compléter (avec pré/post‑conditions)

Question 2: Zone de test

Insérez votre code de test optionnel ci-dessous. Vous pouvez utiliser assert et print pour tester votre programme. Votre code de test sera exécuté à la suite de la définition de votre fonction (il ne faut pas la recopier ici). Ce code test sera ignoré lors de l'évaluation. Il vous sert seulement à tester votre propre code.

Exemple: