Advertisement
elena1234

Ranking*-corelation betwen values with temp

Nov 6th, 2020 (edited)
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.07 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace Ranking
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             var contestsListOfPasswords = new Dictionary<string, List<string>>();
  12.             var usernamesListOfContests= new SortedDictionary<string, List<string>>();
  13.             var usernamesListOfPoints= new Dictionary<string, List<int>>();
  14.             string firstInput = string.Empty;
  15.             while((firstInput=Console.ReadLine())!="end of contests")
  16.             {
  17.                 string[] inputArray = firstInput.Split(':');
  18.                 string contest = inputArray[0];
  19.                 string password = inputArray[1];
  20.                 if (contestsListOfPasswords.ContainsKey(contest) == false)
  21.                 {
  22.                     contestsListOfPasswords[contest] = new List<string>();
  23.                     contestsListOfPasswords[contest].Add(password);
  24.                 }
  25.  
  26.                 else if (contestsListOfPasswords.ContainsKey(contest) == true)
  27.                 {
  28.                     contestsListOfPasswords[contest].Add(password);
  29.                 }
  30.             }
  31.  
  32.             string secondInput = string.Empty;
  33.             while((secondInput=Console.ReadLine())!="end of submissions")
  34.             {
  35.                 string[] secondInputArray = secondInput.Split("=>");
  36.                 string contest = secondInputArray[0];
  37.                 string password = secondInputArray[1];
  38.                 string username = secondInputArray[2];
  39.                 int points = int.Parse(secondInputArray[3]);
  40.  
  41.                 if (contestsListOfPasswords.ContainsKey(contest))//validate the contest
  42.                 {
  43.                     if (contestsListOfPasswords[contest].Contains(password))//validate the password
  44.                     {
  45.                         if (usernamesListOfContests.ContainsKey(username)==false)
  46.                         {
  47.                             usernamesListOfContests[username] = new List<string>();
  48.                             usernamesListOfContests[username].Add(contest);
  49.                             usernamesListOfPoints[username] = new List<int>();
  50.                             usernamesListOfPoints[username].Add(points);
  51.                         }
  52.  
  53.                         else if(usernamesListOfContests.ContainsKey(username)==true)
  54.                         {
  55.                             bool haveThaSameContest = false;
  56.                             foreach (var currentContest in usernamesListOfContests[username])
  57.                             {
  58.                                 if (currentContest == contest)//If you receive the same contest check for update the points
  59.                                 {
  60.                                     haveThaSameContest = true;
  61.                                     int indexOfCurrentContest=usernamesListOfContests[username].IndexOf(contest);
  62.                                     if (points > usernamesListOfPoints[username][indexOfCurrentContest])
  63.                                     {
  64.                                         usernamesListOfPoints[username][indexOfCurrentContest] = points;
  65.                                         break;
  66.                                     }
  67.                                 }
  68.                             }
  69.  
  70.                             if (haveThaSameContest == false)
  71.                             {
  72.                                 usernamesListOfContests[username].Add(contest);
  73.                                 usernamesListOfPoints[username].Add(points);
  74.                             }
  75.  
  76.                         }
  77.                     }
  78.                 }
  79.             }
  80.  
  81.             int maxSum = 0;
  82.             string bestCandidate = string.Empty;
  83.             foreach (var kvp in usernamesListOfPoints)
  84.             {
  85.                 string username = kvp.Key;
  86.                 var listOfPoints = kvp.Value;
  87.                 int currentSumOfPoints = listOfPoints.Sum();
  88.                 if (currentSumOfPoints > maxSum)
  89.                 {
  90.                     maxSum = currentSumOfPoints;
  91.                     bestCandidate = username;
  92.                 }
  93.             }
  94.  
  95.             Console.WriteLine($"Best candidate is {bestCandidate} with total {maxSum} points.");
  96.             Console.WriteLine("Ranking: ");
  97.             foreach (var kvp in usernamesListOfContests)
  98.             {
  99.                 string username = kvp.Key;
  100.                 Console.WriteLine($"{username}");
  101.                 var listOfContest = kvp.Value;
  102.                 var listOfPoints = usernamesListOfPoints[username];
  103.                 var temp = new Dictionary<string, int>();
  104.                 for (int i = 0; i < listOfContest.Count(); i++)
  105.                 {
  106.                     temp[listOfContest[i]] = listOfPoints[i];
  107.                 }
  108.  
  109.                 foreach (var kvp1 in temp.OrderByDescending(x=>x.Value))
  110.                 {
  111.                     string contest = kvp1.Key;
  112.                     int points = kvp1.Value;
  113.                     Console.WriteLine($"#  {contest} -> {points}");
  114.                 }
  115.             }
  116.         }
  117.     }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement