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
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"].
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.