Problema
Um app de tarefas guarda as tarefas em uma coleção tipada como List<T>. Cada tarefa tem um título e um indicador de feita.
Comece com uma lista vazia e processe as operações, cada uma um comando e um título (o título é tudo depois do primeiro espaço):
add <title>: adiciona uma tarefa pendente no fim, a menos que já exista uma com esse título.done <title>: marca essa tarefa como feita (sem efeito se não existir).remove <title>: apaga essa tarefa (sem efeito se não existir).
Implemente todo_list(operations).
Entrada
operations: As operações. Títulos podem ter espaços e são comparados exatamente.
Saída
Retorne os títulos das tarefas não feitas, na ordem em que foram adicionadas.
Restrições
0 ≤ número de operações ≤ 10,000
Títulos têm de 1 a 50 caracteres
Exemplos
Entrada:
operations = ["add Buy milk", "add Write report", "done Buy milk", "add Call Ada"]
Saída esperada:
expected = ["Write report", "Call Ada"]
Entrada:
std::vector<std::string> operations = {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};
Saída esperada:
std::vector<std::string> expected = {"Write report", "Call Ada"};
Entrada:
string[] operations = new string[] {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};
Saída esperada:
string[] expected = new string[] {"Write report", "Call Ada"};
Explicação
Buy milk está feita, então só restam as outras duas, na ordem em que foram adicionadas: ["Write report", "Call Ada"].
Entrada:
operations = ["add Gym", "add Gym", "remove Gym", "done Gym"]
Saída esperada:
expected = []
Entrada:
std::vector<std::string> operations = {"add Gym", "add Gym", "remove Gym", "done Gym"};
Saída esperada:
std::vector<std::string> expected = {};
Entrada:
string[] operations = new string[] {"add Gym", "add Gym", "remove Gym", "done Gym"};
Saída esperada:
string[] expected = new string[] {};
Explicação
O segundo add é ignorado porque Gym já existe; removê-la não deixa nada, e done em uma tarefa inexistente não faz nada: [].
Como abordar
Tente sozinho primeiro e depois abra uma dica de cada vez.
Dica 1
Guarde cada tarefa como um pequeno record com título e estado.
Dica 2
Procure a tarefa pelo título exato antes de adicionar, concluir ou remover.
Dica 3
No final, mantenha só as tarefas não feitas, na ordem de inserção.
Complexidade esperada
tempo O(n²), espaço extra O(n)
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.