En tant qu’organisateur du festival, je veux pouvoir demander à l’application de me générer plusieurs horaires potentiels afin de trouver ceux qui répondent le mieux à mes besoins, à partir d’une liste d’artistes.

Les artistes

La liste d’artiste est un fichier excel qui contient les informations suivantes:

  • Nom de l’artiste
  • Coût de l’artiste
  • Popularité de l’artiste (classé de 1 à n, 1 étant le plus populaire, n le nombre total d’artistes)
  • Le nombre de personnes dans le groupe (ou 1 si c’est un artiste solo)
  • Le genre musical de l’artiste (rock, pop, métal, etc.)
  • Si l’artiste est présentement disponible ou non (note: il est soit disponible pour tout le festival, soit pas du tout)

Liste des artistes possibles :

  • Sun 41
  • Black Earth Peas
  • Bruno Mars
  • Mumford and Suns
  • Kid Rocket
  • Lady Gamma
  • Cyndi Dauppler
  • Kelvin Harris
  • Suns N’ Roses
  • Eclipse Presley
  • 30 Seconds to Mars
  • Coldray
  • Megadearth
  • David Glowie
  • XRay Charles
  • Freddie Mercury
  • Rolling Stars
  • Simple Planet
  • Novana

Note : Vous devez télécharger le fichier excel contenant les artistes ici et l’inclure dans les resources de votre projet. Dans la vraie vie, ce fichier pourrait être fourni à chaque fois, mais pour des raisons pédagogique, on simplifie ça. Ça veut cependant dire que vous devez lire le fichier excel à chaque requête et que son contenu ne peut pas être mis en cache. Nous allons simuler un fichier qui pourrait changer, sans le faire réellement afin de simplifier le projet.

Les stratégies du choix d’artiste

Il existe 3 façons différentes de choisir les artistes pour le festival:

  • Minimiser les coûts: les artistes les moins chers sont choisis en premier.
  • Les plus grandes vedettes: les artistes les plus populaires sont choisis en premier, jusqu’à une limite de budget.
  • Un nombre de vedettes: les X plus grandes vedettes, peu importe le coût.

Pour toutes les stratégies, on doit avoir 1 artiste par jour. Chaque artiste ne peut être présent qu’une seule fois dans le festival.

Minimiser les coûts

On prend simplement les X artistes les moins chers, où X est le nombre de jours du festival.

Les plus grandes vedettes

On prend les vedettes (i.e. les artistes les plus populaire) dans l’ordre de leur popularité, jusqu’au maximum permis par le budget (le budget peut ne pas être tout utilisé, mais il ne doit pas être dépassé).

Par la suite, on remplit les autres jours du festival en prennant les artistes en partant du moins cher.

Note : n’essayez pas de maximiser le nombre de vedettes. On prend la vedette avec la cote de popularité = 1, puis 2, puis 3, etc. jusqu’au maximum.

Un nombre de vedettes

On prend les X artistes les plus populaires, où X est le nombre de vedettes demandées.

Par la suite, on remplit les autres jours du festival en prennant les artistes en partant du moins cher.

Les stratégies de fabrication d’horaire

Il existe 2 façons de créer l’horaire :

  • Crescendo: on commence par les artistes les moins populaires et on finit par les plus populaires.
  • Rollercoaster: on commence par l’artiste le plus populaire et on termine par le 2e plus populaire. Entre les 2, on y va du plus populaire (sauf pour le 1er et le 2e) jusqu’au moins populaire.

Conditions de succès

Condition Description
COS 1 Un horaire est généré en fonction des artistes dans le fichier excel et des paramètres
COS 2 Uniquement les artistes disponible sont considérés
COS 3 Les horaires générés ne sont pas conservés
COS 4 Le coût total des cachets (coût des artistes) est disponible
COS 5 Lorsque les artistes sont triés par coût et qu’ils ont le même coût, alors on prend le plus populaire en premier
COS 6 Un artiste ne peut être présent qu’une seule fois durant le festival
COS 7 Il doit y avoir un et un seul artiste pour chaque jour du festival

API

Attention: la requête suivante ne respecte pas strictement la convention RESTful, mais elle est utilisée pour simplifier l’API dans le cadre du cours.

Requête: Générer un horaire simulé

GET /program/simulation?criteria=<A>&scheduling=<B>&headlinerBudget=<C>&headlinerLimit=<D>

  • <A> est “MinimizeCost”, “HeadlinerBudget”, “HeadlinerNumber”
  • <B> est “Crescendo” ou “Rollercoaster”
  • <C> est le budget maximal pour les vedettes (si applicable, ignorez sinon)
  • <D> est le nombre de vedettes à choisir (si applicable, ignorez sinon)

Réponse

HTTP 200 Ok

{
   "schedule": [
      {
         "date": "2060-07-17"::string,
         "artist": ""::string
      },
      ...
   ],
  "totalArtistCost": 0.00::float
}