10. SoftUni Exam Results C#
Здравейте,
Бихте ли ми помогнали със задачата.
Ето го кода ми: https://pastebin.com/nDcs4TnE
Предварително благодаря!
Здравейте,
Бихте ли ми помогнали със задачата.
Ето го кода ми: https://pastebin.com/nDcs4TnE
Предварително благодаря!
Best,
using System;
using System.Linq;
using System.Collections.Generic;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, decimal> studentsByPoints = new Dictionary<string, decimal>();
Dictionary<string, int> coursesBySubmission = new Dictionary<string, int>();
while (true)
{
string line = Console.ReadLine();
if (line == "exam finished")
{
break;
}
string[] parts = line.Split("-", StringSplitOptions.RemoveEmptyEntries);
string username = parts[0];
string language = parts[1];
//decimal points = decimal.Parse(parts[2]);
// Will throw exception if input does not contain points ("Kiro-banned")
// Check if language contains "banned" before continuing
// with remaining code
if (language == "banned")
{
studentsByPoints.Remove(username);
continue;
}
if (!studentsByPoints.ContainsKey(username))
{
decimal points = decimal.Parse(parts[2]);
studentsByPoints.Add(username, points);
if (!coursesBySubmission.ContainsKey(language))
{
coursesBySubmission.Add(language, 1);
}
else
{
coursesBySubmission[language] += 1;
}
}
else
{
decimal points = decimal.Parse(parts[2]);
if (studentsByPoints[username] <= points)
{
studentsByPoints[username] = points;
}
coursesBySubmission[language] += 1;
}
//if (language == "banned")
//{
// studentsByPoints.Remove(username);
//}
}
Dictionary<string, decimal> sortedByPoints = studentsByPoints
.OrderByDescending(s => s.Value)
.ThenBy(s => s.Key)
.ToDictionary(x => x.Key, x => x.Value);
Console.WriteLine("Results:");
//foreach (var kvp in sortedByPoints)
// Alternative for kvp
foreach (var (student, grade) in sortedByPoints)
{
//Console.WriteLine($"{kvp.Key} | {kvp.Value}");
Console.WriteLine($"{student} | {grade}");
}
Dictionary<string, int> sortedBySubmissions = coursesBySubmission
.Where(s => s.Value > 0)
.OrderByDescending(s => s.Value)
.ThenBy(s => s.Key)
.ToDictionary(x => x.Key, x => x.Value);
Console.WriteLine("Submissions:");
//foreach (var kvp in sortedBySubmissions)
// Alternative for kvp
foreach (var (lang, count) in sortedBySubmissions)
{
//Console.WriteLine($"{kvp.Key} - {kvp.Value}");
Console.WriteLine($"{lang} - {count}");
}
}
}
}
Може ли линк към условието?
Здравейте , чудех се дали може да се реши с вложен речник тази задача , може би нещо такова.
Dictionary<string, Dictionary<string, double>> userData =
new Dictionary<string, Dictionary<string, double>>();
Здравей,
Не би било възможно да използваш само този вложен речник за събиране на данните, освен ако не се направи сложна логика за да осигуриш винаги уникални стойности във вложения речник и по този начин да знаеш броя на явяванията. При това броя на явяванията ще е броя на съдържащите се във вложения речник. Ако един и същи юзър се яви 2 пъти и получи еднакъв брой точки ще се презапише.
Ето едно друго решение: https://pastebin.com/F7VaHbLe
Супер код.Благодаря.Аз си мислех цялта информация за юзъра с езика и точките в един реник , и броя явили се на изпит в друг,но нещо обърках с попълването на вложениея речник после ми го изкарваше на конзолата като IEnumerable.Но сега това е чудесен пример :)