Легко Решено: 0 Процент решений: 0%

Список дел

Ведите список задач: добавляйте, отмечайте выполненными, удаляйте и сообщайте, что осталось.

Чему вы научитесь

  • Хранить задачи с названием и отметкой о выполнении
  • Находить элемент по названию перед изменением
  • Отбирать ещё не выполненные элементы

Условие

Приложение для списка дел хранит задачи в типизированной коллекции вроде List<T>. У каждой задачи есть название и отметка о выполнении.

Начните с пустого списка и обработайте операции, каждая — команда и название (название — всё после первого пробела):

  • add <title>: добавить невыполненную задачу в конец, если задачи с таким названием ещё нет.
  • done <title>: отметить эту задачу выполненной (ничего не делает, если её нет).
  • remove <title>: удалить эту задачу (ничего не делает, если её нет).

Реализуйте todo_list(operations).

Входные данные

operations: Операции. Названия могут содержать пробелы и сравниваются точно.

Выходные данные

Верните названия невыполненных задач в порядке их добавления.

Ограничения

0 ≤ число операций ≤ 10,000

Названия длиной от 1 до 50 символов

Примеры

Пример 1
Ввод:
operations = ["add Buy milk", "add Write report", "done Buy milk", "add Call Ada"]

Ожидаемый вывод:
expected = ["Write report", "Call Ada"]
Ввод:
std::vector<std::string> operations = {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};

Ожидаемый вывод:
std::vector<std::string> expected = {"Write report", "Call Ada"};
Ввод:
string[] operations = new string[] {"add Buy milk", "add Write report", "done Buy milk", "add Call Ada"};

Ожидаемый вывод:
string[] expected = new string[] {"Write report", "Call Ada"};

Пояснение

Buy milk выполнена, поэтому остаются две другие в порядке добавления: ["Write report", "Call Ada"].

Пример 2
Ввод:
operations = ["add Gym", "add Gym", "remove Gym", "done Gym"]

Ожидаемый вывод:
expected = []
Ввод:
std::vector<std::string> operations = {"add Gym", "add Gym", "remove Gym", "done Gym"};

Ожидаемый вывод:
std::vector<std::string> expected = {};
Ввод:
string[] operations = new string[] {"add Gym", "add Gym", "remove Gym", "done Gym"};

Ожидаемый вывод:
string[] expected = new string[] {};

Пояснение

Второй add игнорируется, потому что Gym уже есть; после удаления ничего не остаётся, а done для несуществующей задачи ничего не делает: [].

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Храните каждую задачу как небольшую запись с названием и состоянием.

Подсказка 2

Ищите задачу по точному названию перед добавлением, отметкой или удалением.

Подсказка 3

В конце оставьте только невыполненные задачи в порядке добавления.

Ожидаемая сложность

время O(n²), доп. память O(n)

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.