Advertisement
Alaricy

долбаный трекер задач не проходит 2 тест

Oct 24th, 2022
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.55 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <tuple>
  5. #include <vector>
  6. #include <cstdint>
  7.  
  8. using namespace std;
  9.  
  10. // Перечислимый тип для статуса задачи
  11. enum class TaskStatus {
  12.     NEW,          // новая
  13.     IN_PROGRESS,  // в разработке
  14.     TESTING,      // на тестировании
  15.     DONE          // завершена
  16. };
  17.  
  18. // Объявляем тип-синоним для map<TaskStatus, int>,
  19. // позволяющего хранить количество задач каждого статуса
  20. using TasksInfo = map<TaskStatus, uint64_t>;
  21.  
  22. class TeamTasks {
  23. public:
  24.     map<string, TasksInfo> Tasks_and_persons_;
  25.    
  26.     // Получить статистику по статусам задач конкретного разработчика
  27.     const TasksInfo& GetPersonTasksInfo(const string& person) const
  28.     {
  29.  
  30.         return Tasks_and_persons_.at(person);
  31.     }
  32.  
  33.     // Добавить новую задачу (в статусе NEW) для конкретного разработчитка
  34.     void AddNewTask(const string& person)
  35.     {
  36.        if (Tasks_and_persons_.count(person)==0){
  37.            Tasks_and_persons_[person][TaskStatus::IN_PROGRESS];
  38.            Tasks_and_persons_[person][TaskStatus::TESTING];
  39.            Tasks_and_persons_[person][TaskStatus::DONE];    
  40.        }                
  41.         Tasks_and_persons_[person][TaskStatus::NEW]++;                
  42.     }
  43.  
  44.     // Обновить статусы по данному количеству задач конкретного разработчика,
  45.     // подробности см. ниже
  46. tuple<TasksInfo, TasksInfo> PerformPersonTasks(const string& person, uint64_t task_count){
  47.  
  48. // Проинициализировать словари, учитывающие изменяемость задач    
  49. TasksInfo upd;
  50.     upd[TaskStatus::NEW];      
  51.     upd[TaskStatus::IN_PROGRESS];
  52.     upd[TaskStatus::TESTING];
  53.     upd[TaskStatus::DONE];
  54.  
  55. //Принять текущее состояние задач
  56. TasksInfo untch=GetPersonTasksInfo(person);    
  57.  
  58. tuple<TasksInfo&, TasksInfo&> upd_untch_tasks(upd,untch);    
  59.    
  60.     //Цикл, продвигающий задачи из статуса в статус:
  61.    
  62.     for (uint64_t i=0; i<task_count; ++i)
  63.         {
  64.             if (Tasks_and_persons_[person][TaskStatus::NEW]>0)
  65.             {
  66.                 --Tasks_and_persons_[person][TaskStatus::NEW];
  67.                 ++Tasks_and_persons_[person][TaskStatus::IN_PROGRESS];
  68.                if (untch[TaskStatus::NEW]>0) --untch[TaskStatus::NEW];
  69.                 continue;
  70.             }
  71.             if ((Tasks_and_persons_[person][TaskStatus::NEW]==0)&&
  72.                 (Tasks_and_persons_[person][TaskStatus::IN_PROGRESS]>0))
  73.             {
  74.                 --Tasks_and_persons_[person][TaskStatus::IN_PROGRESS];
  75.                 ++Tasks_and_persons_[person][TaskStatus::TESTING];
  76.                 if (untch[TaskStatus::IN_PROGRESS]>0)--untch[TaskStatus::IN_PROGRESS];                
  77.                 continue;
  78.             }
  79.             if ((Tasks_and_persons_[person][TaskStatus::NEW]==0)&&
  80.                 (Tasks_and_persons_[person][TaskStatus::IN_PROGRESS]==0)&&
  81.                (Tasks_and_persons_[person][TaskStatus::TESTING]>0))
  82.             {
  83.                 --Tasks_and_persons_[person][TaskStatus::TESTING];
  84.                 ++Tasks_and_persons_[person][TaskStatus::DONE];
  85.             if (untch[TaskStatus::TESTING]>0) --untch[TaskStatus::TESTING];
  86.                 continue;
  87.             }          
  88.         }
  89. // конец цикла протаклкивающего задачи
  90.     upd[TaskStatus::NEW]=Tasks_and_persons_[person][TaskStatus::NEW]-untch[TaskStatus::NEW];
  91.     upd[TaskStatus::IN_PROGRESS]=Tasks_and_persons_[person][TaskStatus::IN_PROGRESS]-untch[TaskStatus::IN_PROGRESS];
  92.     upd[TaskStatus::TESTING]=Tasks_and_persons_[person][TaskStatus::TESTING]-untch[TaskStatus::TESTING];
  93.     upd[TaskStatus::DONE]=Tasks_and_persons_[person][TaskStatus::DONE]-untch[TaskStatus::DONE];
  94.  
  95.     return upd_untch_tasks;
  96.     }
  97. };
  98.  
  99. // Принимаем словарь по значению, чтобы иметь возможность
  100. // обращаться к отсутствующим ключам с помощью [] и получать 0,
  101. // не меняя при этом исходный словарь
  102. void PrintTasksInfo(TasksInfo tasks_info) {
  103.     cout << tasks_info[TaskStatus::NEW] << " new tasks" <<
  104.         ", " << tasks_info[TaskStatus::IN_PROGRESS] << " tasks in progress" <<
  105.         ", " << tasks_info[TaskStatus::TESTING] << " tasks are being tested" <<
  106.         ", " << tasks_info[TaskStatus::DONE] << " tasks are done" << endl;
  107. }
  108. int main() {
  109.     TeamTasks tasks;
  110.     tasks.AddNewTask("Ilia");
  111.     for (int i = 0; i < 3; ++i) {
  112.         tasks.AddNewTask("Ivan");
  113.     }
  114.     cout << "Ilia's tasks: ";
  115.     PrintTasksInfo(tasks.GetPersonTasksInfo("Ilia"));
  116.     cout << "Ivan's tasks: ";
  117.     PrintTasksInfo(tasks.GetPersonTasksInfo("Ivan"));
  118.  
  119.     TasksInfo updated_tasks, untouched_tasks;
  120.  
  121.     tie(updated_tasks, untouched_tasks) = 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) = tasks.PerformPersonTasks("Ivan", 2);
  128.     cout << "Updated Ivan's tasks: ";
  129.     PrintTasksInfo(updated_tasks);
  130.     cout << "Untouched Ivan's tasks: ";
  131.     PrintTasksInfo(untouched_tasks);
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement