Retour aux défis
Facile 0 résolus 0 % de réussite

Liste de tâches

Gérez une liste de tâches : ajoutez-les, marquez-les faites, supprimez-les et indiquez ce qui reste.

Ce que vous allez apprendre

  • Gérer des tâches avec un titre et un indicateur « faite »
  • Trouver un élément par son titre avant de le modifier
  • Filtrer les éléments encore en attente

Problème

Une application de tâches les stocke dans une collection typée comme List<T>. Chaque tâche a un titre et un indicateur « faite ».

Partez d'une liste vide et traitez les opérations, chacune une commande et un titre (le titre est tout ce qui suit le premier espace) :

  • add <title>: ajoute une tâche en attente à la fin, sauf si une tâche de ce titre existe déjà.
  • done <title>: marque cette tâche comme faite (sans effet si elle n'existe pas).
  • remove <title>: supprime cette tâche (sans effet si elle n'existe pas).

Implémentez todo_list(operations).

Entrée

operations: Les opérations. Les titres peuvent contenir des espaces et sont comparés exactement.

Sortie

Renvoyez les titres des tâches non faites, dans l'ordre où elles ont été ajoutées.

Contraintes

0 ≤ nombre d'opérations ≤ 10,000

Les titres font de 1 à 50 caractères

Exemples

Exemple 1
Entrée :
operations = ["add Buy milk", "add Write report", "done Buy milk", "add Call Ada"]

Sortie attendue :
expected = ["Write report", "Call Ada"]
Entrée :
std::vector<std::string> operations = {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};

Sortie attendue :
std::vector<std::string> expected = {"Write report", "Call Ada"};
Entrée :
string[] operations = new string[] {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};

Sortie attendue :
string[] expected = new string[] {"Write report", "Call Ada"};

Explication

Buy milk est faite, il ne reste donc que les deux autres, dans l'ordre d'ajout : ["Write report", "Call Ada"].

Exemple 2
Entrée :
operations = ["add Gym", "add Gym", "remove Gym", "done Gym"]

Sortie attendue :
expected = []
Entrée :
std::vector<std::string> operations = {"add Gym", "add Gym", "remove Gym", "done Gym"};

Sortie attendue :
std::vector<std::string> expected = {};
Entrée :
string[] operations = new string[] {"add Gym", "add Gym", "remove Gym", "done Gym"};

Sortie attendue :
string[] expected = new string[] {};

Explication

Le second add est ignoré car Gym existe déjà ; la supprimer ne laisse rien, et done sur une tâche absente ne fait rien : [].

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Stockez chaque tâche comme un petit record de titre et d'état.

Indice 2

Cherchez une tâche par son titre exact avant de l'ajouter, la terminer ou la supprimer.

Indice 3

À la fin, ne gardez que les tâches non faites, dans l'ordre d'ajout.

Complexité attendue

temps O(n²), espace supplémentaire O(n)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.