Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <string>
- #include <tuple>
- #include <vector>
- using namespace std;
- enum class TaskStatus {
- NEW,
- IN_PROGRESS,
- TESTING,
- DONE
- };
- using TasksInfo = map<TaskStatus, int>;
- class TeamTasks {
- private:
- map<string, TasksInfo> all_person;
- public:
- const TasksInfo& GetPersonTasksInfo(const string& person) const{
- return all_person.at(person);
- };
- void AddNewTask(const string& person){
- all_person[person][TaskStatus::NEW]++;
- };
- tuple<TasksInfo, TasksInfo> PerformPersonTasks(const string& person, int task_count)
- {
- TasksInfo updated_tasks;
- TasksInfo untouched_tasks;
- for (int st = static_cast<int>(TaskStatus::NEW); st < static_cast<int>(TaskStatus::DONE); st++)
- {
- TaskStatus current = static_cast<TaskStatus>(st);
- TaskStatus next = static_cast<TaskStatus>(st + 1);
- while(task_count > 0 && all_person.at(person)[current] > 0){
- all_person.at(person).at(current) -= 1;
- updated_tasks[next] += 1;
- task_count -= 1;
- }
- }
- for (auto [status, count] : all_person.at(person)) {
- if (status != TaskStatus::DONE)
- {
- untouched_tasks.insert({ status, count });
- //cout<<count<<endl;
- }
- }
- for (auto [status, count] : updated_tasks) {
- all_person.at(person)[status] += count;
- }
- return tie(updated_tasks, untouched_tasks);
- }
- };
- void PrintTasksInfo(TasksInfo tasks_info) {
- cout << tasks_info[TaskStatus::NEW] << " new tasks"s
- << ", "s << tasks_info[TaskStatus::IN_PROGRESS] << " tasks in progress"s
- << ", "s << tasks_info[TaskStatus::TESTING] << " tasks are being tested"s
- << ", "s << tasks_info[TaskStatus::DONE] << " tasks are done"s << endl;
- }
- int main() {
- TeamTasks tasks;
- tasks.AddNewTask("Ilia"s);
- for (int i = 0; i < 30; ++i) {
- tasks.AddNewTask("Ivan"s);
- }
- cout << "Ilia's tasks: "s;
- PrintTasksInfo(tasks.GetPersonTasksInfo("Ilia"s));
- cout << "Ivan's tasks: "s;
- PrintTasksInfo(tasks.GetPersonTasksInfo("Ivan"s));
- TasksInfo updated_tasks, untouched_tasks;
- tie(updated_tasks, untouched_tasks) = tasks.PerformPersonTasks("Ivan"s, 10);
- cout << "Updated Ivan's tasks: "s;
- PrintTasksInfo(updated_tasks);
- cout << "Untouched Ivan's tasks: "s;
- PrintTasksInfo(untouched_tasks);
- tie(updated_tasks, untouched_tasks) = tasks.PerformPersonTasks("Ivan"s, 40);
- cout << "Updated Ivan's tasks: "s;
- PrintTasksInfo(updated_tasks);
- cout << "Untouched Ivan's tasks: "s;
- PrintTasksInfo(untouched_tasks);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement