thouxanbanuno

asd

Mar 8th, 2021
870
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <tuple>
  5. #include <algorithm>
  6. using namespace std;
  7. /// Перечислимый тип для статуса задачи
  8. enum class TaskStatus {
  9.   NEW,          // новая
  10.   IN_PROGRESS,  // в разработке
  11.   TESTING,      // на тестировании
  12.   DONE          // завершена
  13.  
  14. };
  15. /*
  16. bool operator <(const TaskStatus& lhs, const TaskStatus& rhs){
  17.     return tie(lhs) < tie(rhs);
  18. }
  19. */
  20. /// Объявляем тип-синоним для map<TaskStatus, int>,
  21. /// позволяющего хранить количество задач каждого статуса
  22. using TasksInfo = map<TaskStatus, int>;
  23. map<string, TasksInfo> PersonTasks;
  24. class TeamTasks {
  25. public:
  26.   /// Получить статистику по статусам задач конкретного разработчика
  27.   const TasksInfo& GetPersonTasksInfo(const string& person) const{
  28.     return (PersonTasks[person]);
  29.   }
  30.  
  31.   /// Добавить новую задачу (в статусе NEW) для конкретного разработчитка
  32.   void AddNewTask(const string& person){
  33.     PersonTasks[person][TaskStatus::NEW]++;
  34.   }
  35.  
  36.   /// Обновить статусы по данному количеству задач конкретного разработчика,
  37.   /// подробности см. ниже
  38.   tuple<TasksInfo, TasksInfo> PerformPersonTasks(
  39.         const string& person, int task_count){
  40.         auto tmp = PersonTasks[person];
  41.         vector<int> v(4);
  42.         /*
  43.         {PersonTasks[person].at(TaskStatus::NEW),
  44.         PersonTasks[person].at(TaskStatus::IN_PROGRESS),PersonTasks[person][TaskStatus::TESTING],
  45.         PersonTasks[person][TaskStatus::DONE]
  46.         */
  47.         v[0] = tmp[TaskStatus::NEW];
  48.         v[1] = tmp[TaskStatus::IN_PROGRESS];
  49.         v[2] = tmp[TaskStatus::TESTING];
  50.         v[3] = tmp[TaskStatus::DONE];
  51.         TasksInfo done, undone;
  52.         vector<int> v2(v);
  53.         while(task_count){
  54.             while (v[0]-- && task_count){
  55.                 done[TaskStatus::IN_PROGRESS]++;
  56.                 task_count--;
  57.                 //if(task_count==0) break;
  58.             }
  59.             while (v[1]-- && task_count){
  60.                 done[TaskStatus::TESTING]++;
  61.                 task_count--;
  62.             }
  63.             while (v[2]-- && task_count){
  64.                 done[TaskStatus::DONE]++;
  65.                 task_count--;
  66.             }
  67.             while (v[3]-- && task_count){
  68.                 task_count--;
  69.             }
  70.         }
  71.         int i;
  72.         for(i = 0; i<v.size(); ++i){
  73.             if(v[i]){
  74.                v2[i]=fabs(v[i]-v2[i]);
  75.                break;
  76.             }
  77.             else
  78.                 v2[i]=0;
  79.         }
  80.         for(auto j: v2)
  81.             cout<<j<<' ';
  82.         if(v2[0]){
  83.             undone[TaskStatus::NEW] = v2[0];
  84.         }
  85.         if(v2[1]){
  86.             undone[TaskStatus::IN_PROGRESS] = v2[1];
  87.         }
  88.         if(v2[2]){
  89.             undone[TaskStatus::TESTING] = v2[2];
  90.         }
  91.         // cout<<get<0>(t)<<' ' <<get<1>(t)<<' '<<get<2>(t)<<' '<<get<3>(t);
  92.         PersonTasks[person] = done;
  93.         return (tie(done, undone));
  94.     }
  95.  
  96. };
  97. // Принимаем словарь по значению, чтобы иметь возможность
  98. // обращаться к отсутствующим ключам с помощью [] и получать 0,
  99. // не меняя при этом исходный словарь
  100. void PrintTasksInfo(TasksInfo tasks_info) {
  101.   cout << tasks_info[TaskStatus::NEW] << " new tasks" <<
  102.       ", " << tasks_info[TaskStatus::IN_PROGRESS] << " tasks in progress" <<
  103.       ", " << tasks_info[TaskStatus::TESTING] << " tasks are being tested" <<
  104.       ", " << tasks_info[TaskStatus::DONE] << " tasks are done" << endl;
  105. }
  106.  
  107. int main() {
  108.   TeamTasks tasks;
  109.   tasks.AddNewTask("Ilia");
  110.   for (int i = 0; i < 3; ++i) {
  111.     tasks.AddNewTask("Ivan");
  112.   }
  113.   cout << "Ilia's tasks: ";
  114.   PrintTasksInfo(tasks.GetPersonTasksInfo("Ilia"));
  115.   cout << "Ivan's tasks: ";
  116.   PrintTasksInfo(tasks.GetPersonTasksInfo("Ivan"));
  117.  
  118.     TasksInfo updated_tasks, untouched_tasks;
  119.  
  120.   tie(updated_tasks, untouched_tasks) =
  121.       tasks.PerformPersonTasks("Ivan", 2);
  122.   cout << "Updated Ivan's tasks: ";
  123.   PrintTasksInfo(updated_tasks);
  124.   cout << "Untouched Ivan's tasks: ";
  125.   PrintTasksInfo(untouched_tasks);
  126.  
  127.   tie(updated_tasks, untouched_tasks) =
  128.       tasks.PerformPersonTasks("Ivan", 2);
  129.   cout << "Updated Ivan's tasks: ";
  130.   PrintTasksInfo(updated_tasks);
  131.   cout << "Untouched Ivan's tasks: ";
  132.   PrintTasksInfo(untouched_tasks);
  133.  
  134.   return 0;
  135. }
  136.  
  137.  
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×