Advertisement
chevengur

СПРИНТ № 2 | Пары и кортежи | Урок 7: Вещественные числа и задача о задачах 2/2

Oct 18th, 2023
536
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.81 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <tuple>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. enum class TaskStatus {
  10.     NEW,          
  11.     IN_PROGRESS,  
  12.     TESTING,      
  13.     DONE        
  14. };
  15.  
  16. using TasksInfo = map<TaskStatus, int>;
  17.  
  18. class TeamTasks {
  19. private:
  20.     map<string, TasksInfo> all_person;
  21. public:
  22.     const TasksInfo& GetPersonTasksInfo(const string& person) const{
  23.         return all_person.at(person);
  24.     };
  25.  
  26.     void AddNewTask(const string& person){
  27.         all_person[person][TaskStatus::NEW]++;
  28.     };
  29.  
  30.     tuple<TasksInfo, TasksInfo> PerformPersonTasks(const string& person, int task_count)
  31.     {
  32.        
  33.         TasksInfo updated_tasks;
  34.         TasksInfo untouched_tasks;
  35.         for (int st = static_cast<int>(TaskStatus::NEW); st < static_cast<int>(TaskStatus::DONE); st++)
  36.         {
  37.             TaskStatus current = static_cast<TaskStatus>(st);
  38.             TaskStatus next = static_cast<TaskStatus>(st + 1);
  39.            
  40.             while(task_count > 0 && all_person.at(person)[current] > 0){
  41.                 all_person.at(person).at(current) -= 1;
  42.                 updated_tasks[next] += 1;
  43.                 task_count -= 1;
  44.             }
  45.         }
  46.         for (auto [status, count] : all_person.at(person)) {
  47.             if (status != TaskStatus::DONE)
  48.             {
  49.                 untouched_tasks.insert({ status, count });
  50.                 //cout<<count<<endl;
  51.             }
  52.         }
  53.         for (auto [status, count] : updated_tasks) {
  54.             all_person.at(person)[status] += count;
  55.         }
  56.         return tie(updated_tasks, untouched_tasks);
  57.     }
  58. };
  59.  
  60. void PrintTasksInfo(TasksInfo tasks_info) {
  61.     cout << tasks_info[TaskStatus::NEW] << " new tasks"s
  62.          << ", "s << tasks_info[TaskStatus::IN_PROGRESS] << " tasks in progress"s
  63.          << ", "s << tasks_info[TaskStatus::TESTING] << " tasks are being tested"s
  64.          << ", "s << tasks_info[TaskStatus::DONE] << " tasks are done"s << endl;
  65. }
  66.  
  67. int main() {
  68.     TeamTasks tasks;
  69.     tasks.AddNewTask("Ilia"s);
  70.     for (int i = 0; i < 30; ++i) {
  71.         tasks.AddNewTask("Ivan"s);
  72.     }
  73.     cout << "Ilia's tasks: "s;
  74.     PrintTasksInfo(tasks.GetPersonTasksInfo("Ilia"s));
  75.     cout << "Ivan's tasks: "s;
  76.     PrintTasksInfo(tasks.GetPersonTasksInfo("Ivan"s));
  77.  
  78.     TasksInfo updated_tasks, untouched_tasks;
  79.  
  80.     tie(updated_tasks, untouched_tasks) = tasks.PerformPersonTasks("Ivan"s, 10);
  81.     cout << "Updated Ivan's tasks: "s;
  82.     PrintTasksInfo(updated_tasks);
  83.     cout << "Untouched Ivan's tasks: "s;
  84.     PrintTasksInfo(untouched_tasks);
  85.  
  86.     tie(updated_tasks, untouched_tasks) = tasks.PerformPersonTasks("Ivan"s, 40);
  87.     cout << "Updated Ivan's tasks: "s;
  88.     PrintTasksInfo(updated_tasks);
  89.     cout << "Untouched Ivan's tasks: "s;
  90.     PrintTasksInfo(untouched_tasks);
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement