Tutte le sfide
Facile 0 risolte 0% di accettazione

Lista delle cose da fare

Gestisci una lista di attività: aggiungile, segnale come fatte, rimuovile e riporta quelle ancora da fare.

Cosa imparerai

  • Gestire attività con titolo e flag di completamento
  • Trovare un elemento per titolo prima di modificarlo
  • Filtrare gli elementi ancora da fare

Problema

Un'app di cose da fare salva le attività in una collezione tipizzata come List<T>. Ogni attività ha un titolo e un flag di completamento.

Parti da una lista vuota ed elabora le operazioni, ognuna un comando e un titolo (il titolo è tutto ciò che segue il primo spazio):

  • add <title>: aggiunge un'attività da fare in fondo, a meno che ne esista già una con quel titolo.
  • done <title>: segna quell'attività come fatta (nessun effetto se non esiste).
  • remove <title>: elimina quell'attività (nessun effetto se non esiste).

Implementa todo_list(operations).

Input

operations: Le operazioni. I titoli possono contenere spazi e si confrontano in modo esatto.

Output

Restituisci i titoli delle attività non fatte, nell'ordine in cui sono state aggiunte.

Vincoli

0 ≤ numero di operazioni ≤ 10,000

I titoli hanno da 1 a 50 caratteri

Esempi

Esempio 1
Input:
operations = ["add Buy milk", "add Write report", "done Buy milk", "add Call Ada"]

Output atteso:
expected = ["Write report", "Call Ada"]
Input:
std::vector<std::string> operations = {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};

Output atteso:
std::vector<std::string> expected = {"Write report", "Call Ada"};
Input:
string[] operations = new string[] {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};

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

Spiegazione

Buy milk è fatta, quindi restano solo le altre due, nell'ordine di aggiunta: ["Write report", "Call Ada"].

Esempio 2
Input:
operations = ["add Gym", "add Gym", "remove Gym", "done Gym"]

Output atteso:
expected = []
Input:
std::vector<std::string> operations = {"add Gym", "add Gym", "remove Gym", "done Gym"};

Output atteso:
std::vector<std::string> expected = {};
Input:
string[] operations = new string[] {"add Gym", "add Gym", "remove Gym", "done Gym"};

Output atteso:
string[] expected = new string[] {};

Spiegazione

Il secondo add viene ignorato perché Gym esiste già; rimuoverla non lascia nulla, e done su un'attività inesistente non fa nulla: [].

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

Salva ogni attività come un piccolo record con titolo e stato.

Suggerimento 2

Cerca l'attività per titolo esatto prima di aggiungerla, completarla o rimuoverla.

Suggerimento 3

Alla fine tieni solo le attività non fatte, nell'ordine di inserimento.

Complessità attesa

tempo O(n²), spazio aggiuntivo O(n)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.