elena1234

Ranking-with class

Jan 7th, 2021 (edited)
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.57 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace Ranking
  6. {
  7.     public class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             var dictContestPassword = new Dictionary<string, string>();
  12.             var listWithStudents = new List<Student>();
  13.             string input;
  14.             while ((input = Console.ReadLine()) != "end of contests")
  15.             {
  16.                 string[] inputArray = input.Split(":");
  17.                 string contest = inputArray[0];
  18.                 string password = inputArray[1];
  19.                 if (!dictContestPassword.ContainsKey(contest))
  20.                 {
  21.                     dictContestPassword.Add(contest, password);
  22.                 }
  23.             }
  24.  
  25.             while ((input = Console.ReadLine()) != "end of submissions")
  26.             {
  27.                 string[] inputArray = input.Split("=>");
  28.                 string contest = inputArray[0];
  29.                 string password = inputArray[1];
  30.                 string student = inputArray[2];
  31.                 int points = int.Parse(inputArray[3]);
  32.                 if (!dictContestPassword.ContainsKey(contest) || dictContestPassword[contest] != password)
  33.                 {
  34.                     continue;
  35.                 }
  36.  
  37.                 if (!listWithStudents.Any(x => x.Name == student))
  38.                 {
  39.                     var newStudent = new Student(student);
  40.                     newStudent.Name = student;
  41.                     newStudent.ContestsWithPoints = new Dictionary<string, int>();
  42.                     newStudent.ContestsWithPoints.Add(contest, points);
  43.                     listWithStudents.Add(newStudent);
  44.                 }
  45.  
  46.                 else if (listWithStudents.Any(x => x.Name == student))
  47.                 {
  48.                     var findTheStudent = listWithStudents.First(x => x.Name == student);
  49.                     if (!findTheStudent.ContestsWithPoints.Any(x => x.Key == contest))
  50.                     {
  51.                         findTheStudent.ContestsWithPoints.Add(contest, points);
  52.                     }
  53.  
  54.                     else
  55.                     {
  56.                         if (findTheStudent.ContestsWithPoints[contest] < points)
  57.                         {
  58.                             findTheStudent.ContestsWithPoints[contest] = points;
  59.                         }
  60.                     }
  61.                 }
  62.  
  63.  
  64.             }
  65.  
  66.             PrintTheRanking(listWithStudents);
  67.         }
  68.  
  69.  
  70.         public class Student
  71.         {
  72.             public string Name { get; set; }
  73.             public Dictionary<string, int> ContestsWithPoints { get; set; }
  74.  
  75.             public Student(string name)
  76.             {
  77.                 this.Name = name;
  78.                 this.ContestsWithPoints = new Dictionary<string, int>();
  79.             }
  80.         }
  81.  
  82.         private static void PrintTheRanking(List<Student> listWithStudents)
  83.         {
  84.             var bestCandidate = listWithStudents.OrderByDescending(x => x.ContestsWithPoints.Values.Sum()).First();
  85.             Console.WriteLine($"Best candidate is {bestCandidate.Name} with total {bestCandidate.ContestsWithPoints.Values.Sum()} points.");
  86.             Console.WriteLine("Ranking:");
  87.             foreach (var student in listWithStudents.OrderBy(x => x.Name))
  88.             {
  89.                 Console.WriteLine(student.Name);
  90.                 foreach (var (contest, points) in student.ContestsWithPoints.OrderByDescending(x => x.Value))
  91.                 {
  92.                     Console.WriteLine($"#  {contest} -> {points}");
  93.                 }
  94.             }
  95.         }
  96.     }
  97. }
  98.  
Add Comment
Please, Sign In to add comment