Софтуерно Инженерство
Loading...
anton_fotev avatar anton_fotev 5 Точки

Проблем при Здарача 06. Courses

Колеги, дава ми 20/100 с тайм-кръш и съобщения за неверни отговори. На предварителните проверки кода ми дава верни отговори

Задачата:

6.Courses

Write a program, which keeps information about courses. Each course has a name and registered students.

You will receive course name and student name, until you receive the command "end". Check if such course already exists, and if not, add the course. Register the user into the course. When you do receive the command "end", print the courses with their names and total registered users, ordered by the count of registered users in descending order. For each contest print registered users ordered by name in ascending order.

Input

  • Until you receive "end", the input come in the format: "{courseName} : {studentName}".
  • The product data is always delimited by " : ".

Output

  • Print information about each course, following the format:
    "{courseName}: {registeredStudents}"
  • Print information about each student, following the format:
    "-- {studentName}"
     

    Examples

    Input

    Output

    Programming Fundamentals : John Smith

    Programming Fundamentals : Linda Johnson

    JS Core : Will Wilson

    Java Advanced : Harrison White

    end

    Programming Fundamentals: 2

    -- John Smith

    -- Linda Johnson

    JS Core: 1

    -- Will Wilson

    Java Advanced: 1

    -- Harrison White

    Algorithms : Jay Moore

    Programming Basics : Martin Taylor

    Python Fundamentals : John Anderson

    Python Fundamentals : Andrew Robinson

    Algorithms : Bob Jackson

    Python Fundamentals : Clark Lewis

    end

    Python Fundamentals: 3

    -- Andrew Robinson

    -- Clark Lewis

    -- John Anderson

    Algorithms: 2

    -- Bob Jackson

    -- Jay Moore

    Programming Basics: 1

    -- Martin Taylor



    Моето решение:

    using System;
    using System.Collections.Generic;
    using System.Linq;
                        
    public class Program
    {
        public static void Main()
        {                
            string inputPrim = "";
            
            var listOfCours = new Dictionary<string, List<string>>();
            
            while ((inputPrim = Console.ReadLine()) != "end")
            {
              var input = inputPrim
                  .Split(':')
                  .Select(x => x.Trim())
                  .ToArray();
                
                if (!listOfCours.ContainsKey(input[0]))
                {
                 listOfCours[input[0]] = new List<string>();    
                }
                
                listOfCours[input[0]].Add(input[1]);
            } // end while
            
            listOfCours = listOfCours
                .OrderByDescending(x => x.Value.Count)
                .ThenByDescending(x => x.Key)
                .ToDictionary(x => x.Key,
                              x => x.Value);
            
            foreach (var kvp in listOfCours)
            {
             Console.WriteLine("{0}: {1}", kvp.Key, kvp.Value.Count);
                
             var orderlistMembers = kvp.Value
                 .OrderBy(x => x)
                 .ToList();
                
              for (int i = 0; i < kvp.Value.Count; i++)
              {
                Console.WriteLine("-- {0}", orderlistMembers[i]);  
              }              
            } // end foreach for rezult
            
            
        }
    }

    // Programming Fundamentals : John Smith
    // Programming Fundamentals : Linda Johnson
    // JS Core : Will Wilson
    // Java Advanced : Harrison White
    // end
    //Programming Fundamentals: 2
    //-- John Smith
    //-- Linda Johnson
    //JS Core: 1
    //-- Will Wilson
    //Java Advanced: 1
    //-- Harrison White

    // Algorithms : Jay Moore
    // Programming Basics : Martin Taylor
    // Python Fundamentals : John Anderson
    // Python Fundamentals : Andrew Robinson
    // Algorithms : Bob Jackson
    // Python Fundamentals : Clark Lewis
    // end
    //Python Fundamentals: 3
    //-- Andrew Robinson
    //-- Clark Lewis
    //-- John Anderson
    //Algorithms: 2
    //-- Bob Jackson
    //-- Jay Moore
    //Programming Basics: 1
    //-- Martin Taylor

0
Fundamentals Module
knoteva avatar knoteva 784 Точки
Best Answer

Здравей,

Може би е заради сортировката във foreach-a. Също не разбирам много идеята на първата сортировка, а и май не работи както трябва. 

Ето ти пример как може да сортираш речника и да го принтираш:

//} // end while


        foreach (var kvp in listOfCours.OrderByDescending(x => x.Value.Count))
        {
            Console.WriteLine("{0}: {1}", kvp.Key, kvp.Value.Count);
            foreach (var item in kvp.Value.OrderBy(x => x))
            {
                Console.WriteLine("-- {0}", item);
            }
        } // end foreach for rezult

0
17/06/2019 14:53:18
anton_fotev avatar anton_fotev 5 Точки

Сега дава 100/100. Мерси за помощта. :)

П.П. И все пак, първоначалния код работи. Дава верни отговори на примерните въпроси, както и с произволно избрани стойности. В Джъджа отчита и верни, и неверни отговори. Как мога да разбера къде и кога точно се чупи кода, както съм го написал?

1
knoteva avatar knoteva 784 Точки

Сега като тествам кода ти ми дава само "Incorrect answer", няма "Time limit". Може би вчера е имало някакъв проблем с Judge.  Ако махнеш сортировката  ".ThenByDescending(x => x.Key)" дава 100 точки. В условието никъде не е казано, че трябва имената на курсовете да се сортират. Тоест ако имаш примерно 3 курса с еднакъв брой студенти, трябва да ги принтираш по реда, в който са ти подадени. Пример:

При вход:

Algorithms : Jay Moore

Programming Basics : Martin Taylor

Python Fundamentals : John Anderson

end 

Изход:

Algorithms: 1

-- Jay Moore

Programming Basics: 1

-- Martin Taylor

Python Fundamentals: 1

-- John Anderson

В твоя случай първо ще принтира "Python Fundamentals: 1..", после "Programming Basics: 1..." и накрая "Algorithms: 1..."

0
19/06/2019 13:26:44
anton_fotev avatar anton_fotev 5 Точки

Благодаря много.

1