+ Нов въпрос
anton_fotev 7 Точки

Колеги, дава ми 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>();
}

} // 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
//-- 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
knoteva 1038 Точки

Здравей,

Може би е заради сортировката във 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 7 Точки

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

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

1
knoteva 1038 Точки

Сега като тествам кода ти ми дава само "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 7 Точки

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

1