Loading...
Axiomatik avatar Axiomatik 2422 Точки

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}");
            }
        }
    }
}

 

1
Ivan_Zzdravkov avatar Ivan_Zzdravkov 2 Точки

Здравейте , чудех се дали може да се реши с вложен речник тази задача , може би нещо такова.

Dictionary<string, Dictionary<string, double>> userData =
                  new Dictionary<string, Dictionary<string, double>>();

0
icowwww avatar icowwww 2779 Точки

Здравей,

Не би било възможно да използваш само този вложен речник за събиране на данните, освен ако не се направи сложна логика за да осигуриш винаги уникални стойности във вложения речник и по този начин да знаеш броя на явяванията. При това броя на явяванията ще е броя на съдържащите се във вложения речник. Ако един и същи юзър се яви 2 пъти и получи еднакъв брой точки ще се презапише.

Ето едно друго решение: https://pastebin.com/F7VaHbLe

0
Ivan_Zzdravkov avatar Ivan_Zzdravkov 2 Точки

Супер код.Благодаря.Аз си мислех цялта информация за юзъра с езика и точките в един реник , и броя явили се на изпит в друг,но нещо обърках с попълването на вложениея речник после ми го изкарваше на конзолата като IEnumerable.Но сега това е чудесен пример :)

0
krum_43 avatar krum_43 756 Точки

Може ли линк към условието?

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