VLADISLAVTODOROV

SoftUni Course Planning

Jun 9th, 2021
641
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.Text;
  5.  
  6. namespace _10._SoftUni_Course_Planning
  7. {
  8.     class SoftUniCoursePlanning
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             //На първия ред ще получите първоначалния график с Split(", ")
  13.             List<string> grapfic = Console.ReadLine()
  14.                 .Split(", ")
  15.                 .ToList();
  16.  
  17.             //вход за командата - тя е друг формат: Split(':')
  18.             string isCourseStart = Console.ReadLine();
  19.  
  20.             //докато не е "course start"
  21.             while (isCourseStart != "course start")
  22.             {
  23.                 //значи е команда и я записваме в масива от стринги command
  24.                 string[] command = isCourseStart.Split(':').ToArray();
  25.  
  26.                 //koмандата е някои от известните ни случай
  27.                 switch (command[0])
  28.                 {
  29.                     case "Add":   //Add: { lessonTitle}
  30.  
  31.                         Add(grapfic, command);   //метод за добавяне
  32.  
  33.                         break;   //Insert:{ lessonTitle}:{ index}
  34.                     case "Insert":
  35.  
  36.                         Insert(grapfic, command);
  37.  
  38.                         break;
  39.                     case "Remove":    //Remove:{ lessonTitle}
  40.  
  41.                         Remove(grapfic, command);
  42.  
  43.                         break;
  44.                     case "Swap":    //Swap:{ lessonTitle}:{ lessonTitle}
  45.  
  46.                         Swap(grapfic, command);
  47.  
  48.                         break;   //Exercise:{ lessonTitle}
  49.                     case "Exercise":
  50.  
  51.                         Exercise(grapfic, command);
  52.  
  53.                         break;
  54.  
  55.                     default: break;
  56.                 }              
  57.  
  58.                 //нова команда
  59.                 isCourseStart = Console.ReadLine();
  60.  
  61.             }
  62.  
  63.             //извеждаме резултата
  64.             foreach (var item in grapfic)
  65.             {
  66.                 Console.WriteLine("{0}.{1}", (grapfic.IndexOf(item) + 1), item);
  67.             }
  68.         }
  69.  
  70.         private static void Exercise(List<string> grapfic, string[] command)
  71.         {
  72.             //Exercise:{lessonTitle} -
  73.             // - ако урока съществува и няма упражнение, добавете упражнението в графика веднага след индекса на урока, в формат  "{lessonTle}-Exercise".
  74.             // - ако урокът не съществува, добавете урока в края на курса, следван от упражнението.
  75.  
  76.             //ИДЕЯТА:
  77.             //1. И в трите случая имаме стринг тип "{lessonTitle}-Exercise"
  78.             // - може да е изцяло наличен
  79.             // - може да е налична само лекцията
  80.             // - може нищо да не е налично
  81.             //2. Създаваме го
  82.             //3. И според случая го вкарваме в графика
  83.             //4. ТОВА ЩЕ ПРОМЕНИ УСЛОВИЯТА НА ДРУГИТЕ МЕТОДИ: ще имаме .Contains("{lessonTitle}" или "{lessonTitle}-Exercise")
  84.  
  85.             //1.
  86.             //например: command = Exercise:Databases
  87.             StringBuilder lessonExercise = new StringBuilder();
  88.             lessonExercise.Append(command[1]);   //Databases
  89.             lessonExercise.Append('-');           //-
  90.             lessonExercise.Append(command[0]);   //Exercise
  91.  
  92.             //сега стринга ни е както го искат на изхода: Databases-Exercise
  93.  
  94.             //2.
  95.             // съдържа ли се изцяло в графика?:
  96.             bool isLessonExercise = grapfic.Contains(lessonExercise.ToString());
  97.  
  98.             if (isLessonExercise)
  99.             {
  100.                 return;  //нищо не правим и излизаме от метода
  101.             }
  102.             else   //ako не е изцяло в графика
  103.             {
  104.                 //съдържа ли се само лекцията
  105.                 if (grapfic.Contains(command[1]))
  106.                 {
  107.                     //тогава в графика след лекцията, добавяме лекцията + упр. т.е. lessonExercise
  108.                     int indexLesson = grapfic.IndexOf(command[1]);
  109.                     grapfic.Insert((indexLesson + 1), lessonExercise.ToString());
  110.                 }
  111.                 else  //в графика не се съдържа нищо
  112.                 {
  113.                     //добавяме лекцията и упр накрая
  114.                     grapfic.Add(command[1]);
  115.                     grapfic.Add(lessonExercise.ToString());
  116.                 }
  117.             }
  118.  
  119.         }
  120.  
  121.         private static void Swap(List<string> grapfic, string[] command)
  122.         {
  123.             //Swap:{lessonTitle}:{lessonTitle} - променете мястото на двата урока,  ако съществуват
  124.  
  125.             //Първо работим само ако и ДВЕТЕ лекции съществуват!
  126.             //НО трябва да имаме предвид, че е възможно към всяка от тях да има и упражнение
  127.             //има упражнения само ако има лекции т.е. няма сами упражнения
  128.             //ПЪРВО да оправим лекциите - от това упражненията няма да се променят
  129.  
  130.             //да проверим за лекции
  131.             bool isЕxist = grapfic.Contains(command[1]) && grapfic.Contains(command[2]);
  132.  
  133.             if (isЕxist)   //ако съществуват
  134.             {
  135.                 //индексите на лекциите
  136.                 int indexLesOne = grapfic.IndexOf(command[1]);
  137.                 int indexLesTwo = grapfic.IndexOf(command[2]);
  138.  
  139.                 //за да не правим помощна променлива тип стринг, хайде да работим директно в графика
  140.  
  141.                 //първия урок го слагаме на мястото на втория(втория се отмества)
  142.                 grapfic.Insert(indexLesTwo, grapfic[indexLesOne]);
  143.  
  144.                 //трием първия урок от старото място(втория се връща на старото си място)
  145.                 grapfic.RemoveAt(indexLesOne);
  146.  
  147.                 //втория урок го слагаме на мястото на първия
  148.                 grapfic.Insert(indexLesOne, grapfic[indexLesTwo]);
  149.  
  150.                 //трием втория
  151.                 grapfic.RemoveAt(indexLesTwo + 1);
  152.  
  153.                 //ДО ТУК разменихме лекциите, като индексите на упражненията(ако ги има!) са си на оргиналните места
  154.                 //Сега:
  155.                 // - ако и двете упражнения съществуват, ще ги разменим както напраявихме с лекциите
  156.                 // - ако само еднато упражнение съществува, ще го вмъкнем на новото място и ще го изтрием от старото
  157.  
  158.  
  159.  
  160.                 //така трябва да изглеждат стринговите стойности на упражненията: ако съществуват ни трябват за да им хванем индексите
  161.                 string execiseOne = command[1] + "-" + "Exercise";
  162.                 string execiseTwo = command[2] + "-" + "Exercise";
  163.  
  164.                 //aко всяка от лекциите има и упражнение
  165.                 if (grapfic.Contains(execiseOne) && grapfic.Contains(execiseTwo))
  166.                 {
  167.                     int indexExeOne = grapfic.IndexOf(execiseOne);
  168.                     int indexExeTwo = grapfic.IndexOf(execiseTwo);
  169.  
  170.                     //първото упражнение го слагаме на мястото на второто(второто се отмества)                  
  171.                     grapfic.Insert(indexExeTwo, grapfic[indexExeOne]);
  172.  
  173.                     //трием първото упр. от старото място(второто се връща на старото си място)
  174.                     grapfic.RemoveAt(indexExeOne);
  175.  
  176.                     //второто упр. го слагаме на мястото на първото
  177.                     grapfic.Insert(indexExeOne, grapfic[indexExeTwo]);
  178.  
  179.                     //трием второто
  180.                     grapfic.RemoveAt(indexExeTwo + 1);
  181.                 }
  182.                 else if (grapfic.Contains(execiseOne))   //ако само първата лекция има упражнение
  183.                 {
  184.                     int indexExeOne = grapfic.IndexOf(execiseOne);
  185.  
  186.                     //го вмъкваме след едноимения урок, който Обаче вече сме преместили
  187.                     grapfic.Insert(indexLesTwo + 1, grapfic[indexExeOne]);
  188.  
  189.                     //трием от старото място
  190.                     grapfic.RemoveAt(indexExeOne);
  191.                 }
  192.                 else if (grapfic.Contains(execiseTwo))   //ако само втората лекция има упражнение
  193.                 {
  194.                     int indexExeTwo = grapfic.IndexOf(execiseTwo);
  195.  
  196.                     //го вмъкваме след едноимения урок, който Обаче вече сме преместили
  197.                     grapfic.Insert(indexLesOne + 1, grapfic[indexExeTwo]);
  198.  
  199.                     //трием от старото място
  200.                     grapfic.RemoveAt(indexExeTwo + 1);
  201.                 }
  202.             }
  203.         }
  204.  
  205.         private static void Remove(List<string> grapfic, string[] command)
  206.         {
  207.             //Remove: { lessonTitle} -премахнете урока,  ако съществува.
  208.  
  209.             grapfic.Remove(command[1]);   //задължително трием урока - ще го изтрие ако е наличен            
  210.  
  211.             //трябва да проверим дали има упражнение след урока
  212.             string exercise = command[1] + "-" + "Exercise";
  213.  
  214.             if (grapfic.Contains(exercise))
  215.             {
  216.                 grapfic.Remove(exercise);  //трием упражнението, то е дошло на индекса на урока
  217.             }
  218.         }
  219.  
  220.         private static void Insert(List<string> grapfic, string[] command)
  221.         {
  222.             //Insert:{lessonTitle}:{index}- вмъкнете урока в дадения индекс, ако той не съществува.
  223.             bool isContains = grapfic.Contains(command[1]);
  224.  
  225.             if (isContains == false)
  226.             {
  227.                 grapfic.Insert(int.Parse(command[2]), command[1]);
  228.             }
  229.  
  230.         }
  231.  
  232.         private static void Add(List<string> grapfic, string[] command)
  233.         {
  234.             //Add:{lessonTitle} - добавете урока в края на графика, ако той не съществува.
  235.             bool isContains = grapfic.Contains(command[1]);
  236.  
  237.             if (isContains == false)
  238.             {
  239.                 grapfic.Add(command[1]);
  240.             }
  241.         }
  242.     }
  243. }
  244.  
RAW Paste Data