Loading...
Taniaaleksandrova avatar Taniaaleksandrova 6 Точки

10.SoftUni Course Planning - Lists - C# Fundamentals

Здравейте, на тази задачка ми гърми само 8-ми и 10-ти тест, но наистина не мога да си открия грешката, въртях какви ли не комбинации. Ако някой има желание да ми помогне, ще съм му много благодарна https://pastebin.com/kE5zhMdR

Условие

You are tasked to help with the planning of the next Technology Fundamentals course by keeping track of the lessons, that are going to be included in the course, as well as all the exercises for the lessons.

On the first line you will receive the initial schedule of the lessons and the exercises that are going to be a part of the next course, separated by comma and space ", ". But before the course starts, some changes should be made. Until you receive "course start" you will be given some commands to modify the course schedule. The possible commands are:

Add:{lessonTitle} – add the lesson to the end of the schedule, if it does not exist.

Insert:{lessonTitle}:{index} – insert the lesson to the given index, if it does not exist.

Remove:{lessonTitle} – remove the lesson, if it exists.

Swap:{lessonTitle}:{lessonTitle} – change the place of the two lessons, if they exist.

Exercise:{lessonTitle} – add Exercise in the schedule right after the lesson index, if the lesson exists and there is no exercise already, in the following format "{lessonTitle}-Exercise". If the lesson doesn`t exist, add the lesson in the end of the course schedule, followed by the Exercise.

Each time you Swap or Remove a lesson, you should do the same with the Exercises, if there are any, which follow the lessons.

Input / Constraints

  • first line – the initial schedule lessons – strings, separated by comma and space ", "
  • until "course start" you will receive commands in the format described above

Output

  • Print the whole course schedule, each lesson on a new line with its number(index) in the schedule:
    "{lesson index}.{lessonTitle}"
  • Allowed working time / memory: 100ms / 16MB.

Examples

Input

Output

Comment

Data Types, Objects, Lists

Add:Databases

Insert:Arrays:0

Remove:Lists

course start

1.Arrays

2.Data Types

3.Objects

4.Databases

 

We receive the initial schedule.

Next, we add Databases lesson, because it doesn`t exist.

We Insert at the given index lesson Arrays, because its not present in the schedule.

After receiving the last command and removing lesson Lists, we print the whole schedule.

Input

Output

Comment

Arrays, Lists, Methods

Swap:Arrays:Methods

Exercise:Databases

Swap:Lists:Databases

Insert:Arrays:0

course start

1.Methods

2.Databases

3.Databases-Exercise

4.Arrays

5.Lists

We swap the given lessons, because both exist.

After receiving the Exercise command, we see that such lesson doesn`t exist, so we add the lesson at the end, followed by the exercise.

We swap Lists and Databases lessons, the

Databases-Exercise is also moved after the Databases lesson.

We skip the next command, because we already have such lesson in our schedule.

 

Тагове:
1
Fundamentals Module
MartinBG avatar MartinBG 4803 Точки

Най-вероятно проблемът е при модифициране на списъка, когато има и упражнение към лекцията.

Решението е по-сложно, отколкото е разумно, дори и ако трябва да се работи само и единствено с List. Аз лично бих използвал List<List<String>>, като лекцията е на индекс 0 във вътрешния List, а упражнението - ако има такова, е на индекс 1. Това доста ще опрости логиката по местене/триене на пакет от лекция(упражнение).

 

0
16/06/2020 22:43:15
Iv_Konov avatar Iv_Konov 383 Точки

Здравей, Taniaaleksandrova,

 

Много добра идея е да не се ядосваш на хора с много точки (примерно като на @MartinBG  и други - дават много добри идеи), т.е. видях, че не си му отговорила... smiley

Отделно, пробвах да ти коригирам двете грешки (8, 10) и реших грешка 8, но ми отне време... Предлагам да провериш  Exercise, Swap и Remove - примерно:

 

===

static List<string> Exercise(List<string> list, string[] command)
        {
            string lessonTitle = command[1];

            if (list.Contains(lessonTitle) && !list.Contains(lessonTitle + "-Exercise")) // Exercise:{lessonTitle} – add Exercise in the schedule right after the lesson index, if the lesson exists and there is no exercise already, in the following format "{lessonTitle}-Exercise".
            {
                int index = list.IndexOf(lessonTitle);
                list.Insert(index + 1, lessonTitle + "-Exercise");
            }
            else if (!list.Contains(lessonTitle)) // If the lesson doesn`t exist, add the lesson in the end of the course schedule, followed by the Exercise.
            {
                list.Add(lessonTitle);
                list.Add(lessonTitle + "-Exercise");
            }

            return list;
        }

===

 

Прилагам ти цялото решение - 100/100:

using System;
using System.Collections.Generic;
using System.Linq;

namespace _10._SoftUni_Course_Planning
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = Console.ReadLine().Split(", ").ToList();

            string input = string.Empty;

            while ((input = Console.ReadLine()) != "course start")
            {
                string[] command = input.Split(":");

                list = SoftUniCoursePlanning(list, command);
            }

            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine($"{i + 1}.{list[i]}");
            }
        }

        static List<string> SoftUniCoursePlanning(List<string> list, string[] command)
        {
            switch (command[0])
            {
                case "Add": list = Add(list, command); break;
                case "Insert": list = Insert(list, command); break;
                case "Remove": list = Remove(list, command); break;
                case "Swap": list = Swap(list, command); break; 
                case "Exercise": list = Exercise(list, command); break;
                default:
                    break;
            }

            return list;
        }

        static List<string> Exercise(List<string> list, string[] command)
        {
            string lessonTitle = command[1];

            if (list.Contains(lessonTitle) && !list.Contains(lessonTitle + "-Exercise"))
            {
                int index = list.IndexOf(lessonTitle);
                list.Insert(index + 1, lessonTitle + "-Exercise");
            }
            else if (!list.Contains(lessonTitle))
            {
                list.Add(lessonTitle);
                list.Add(lessonTitle + "-Exercise");
            }

            return list;
        }

        static List<string> Swap(List<string> list, string[] command)
        {
            string lessonTitle1 = command[1];
            string lessonTitle2 = command[2];
            int index1 = list.IndexOf(lessonTitle1);
            int index2 = list.IndexOf(lessonTitle2);

            if (list.Contains(lessonTitle1) && list.Contains(lessonTitle2))
            {               
                string tempLessonTitle1 = list.ElementAt(index1);
                list[index1] = list[index2];
                list[index2] = tempLessonTitle1;
            }

            if (list.Contains(lessonTitle1 + "-Exercise") && list.Contains(list[index1]))
            {
                index1 = list.IndexOf(lessonTitle1);                
                list.Remove(lessonTitle1 + "-Exercise");
                list.Insert(index1 + 1, lessonTitle1 + "-Exercise");               
            }
            else if(list.Contains(lessonTitle2 + "-Exercise") && list.Contains(list[index2]))
            {
                index2 = list.IndexOf(lessonTitle2);
                list.Remove(lessonTitle2 + "-Exercise");
                list.Insert(index2 + 1, lessonTitle2 + "-Exercise");                
            }

            return list;
        }

        static List<string> Remove(List<string> list, string[] command)
        {
            string lessonTitle = command[1];

            if (list.Contains(lessonTitle))
            {
                list.Remove(lessonTitle);
            }
            else if (list.Contains(lessonTitle + "-Exercise"))
            {
                list.Remove(lessonTitle +"-Exercise");
            }

            return list;
        }

        static List<string> Insert(List<string> list, string[] command)
        {
            string lessonTitle = command[1];
            int index = int.Parse(command[2]);

            if (index < 0 || index >= list.Count)
            {
                return list;
            }
            else if (!list.Contains(lessonTitle))
            {
                list.Insert(index, lessonTitle);
            }

            return list;
        }

        static List<string> Add(List<string> list, string[] command)
        {
            string lessonTitle = command[1];

            if (!list.Contains(lessonTitle))
            {
                list.Add(lessonTitle);
            }

            return list;
        }
    }
}

 

 

Поздрави,

Иван

0
Taniaaleksandrova avatar Taniaaleksandrova 6 Точки

Много благодаря за изчерпателния отговор!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.