Advertisement
bobypenev

04. ForceBook

Jun 29th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.70 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ForceBook
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             // Users database
  14.             Dictionary<string, string> forceUsers = new Dictionary<string, string>();
  15.             // Sides members database
  16.             Dictionary<string, int> sidesCount = new Dictionary<string, int>();
  17.  
  18.             while (true)
  19.             {
  20.                 string input = Console.ReadLine();
  21.                 if (input == "Lumpawaroo") { break; }
  22.  
  23.                 if (input.Contains(" | "))
  24.                 {
  25.                     // Process input
  26.                     string[] tokens = input.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  27.                     string inputSide = tokens[0].Trim();
  28.                     string inputUser = tokens[1].Trim();
  29.  
  30.                     // Add non-existing user
  31.                     if (forceUsers.ContainsKey(inputUser) == false)
  32.                     {
  33.                         forceUsers.Add(inputUser, inputSide);
  34.  
  35.                         if (sidesCount.ContainsKey(inputSide) == false)
  36.                         {
  37.                             sidesCount.Add(inputSide, 0);
  38.                         }
  39.                         sidesCount[inputSide]++;
  40.                     }
  41.                 }
  42.                 else if (input.Contains("->"))
  43.                 {
  44.                     string[] tokens = input.Split("->".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  45.                     string inputUser = tokens[0].Trim();
  46.                     string inputSide = tokens[1].Trim();
  47.  
  48.                     // Add non-existing user
  49.                     if (forceUsers.ContainsKey(inputUser) == false)
  50.                     {
  51.                         forceUsers.Add(inputUser, inputSide);
  52.  
  53.                         // Add non-existing side
  54.                         if (sidesCount.ContainsKey(inputSide) == false)
  55.                         {
  56.                             sidesCount.Add(inputSide, 0);
  57.                         }
  58.                         // Increment side members
  59.                         sidesCount[inputSide]++;
  60.                     }
  61.                     // Update existing user's side
  62.                     else
  63.                     {
  64.                         string currentSide = forceUsers[inputUser];
  65.                         forceUsers[inputUser] = inputSide;
  66.  
  67.                         // Add non-existing side
  68.                         if (sidesCount.ContainsKey(inputSide) == false)
  69.                         {
  70.                             sidesCount.Add(inputSide, 0);
  71.                         }
  72.                         // Increment side members
  73.                         sidesCount[inputSide]++;
  74.                         // Decrement former user's side
  75.                         sidesCount[currentSide]--;
  76.                     }
  77.  
  78.                     Console.WriteLine($"{inputUser} joins the {inputSide} side!");
  79.                 }
  80.             }
  81.  
  82.             // Sort and print
  83.             sidesCount = sidesCount.OrderByDescending(s => s.Value).ThenBy(s => s.Key).ToDictionary(s => s.Key, s => s.Value);
  84.             foreach (var side in sidesCount)
  85.             {
  86.                 if (side.Value > 0)
  87.                 {
  88.                     Console.WriteLine($"Side: {side.Key}, Members: {side.Value}");
  89.                     var sideUsers = forceUsers.Where(u => u.Value == side.Key).OrderBy(u => u.Key);
  90.  
  91.                     foreach (var user in sideUsers)
  92.                     {
  93.                         Console.WriteLine($"! {user.Key}");
  94.                     }
  95.                 }
  96.             }
  97.         }
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement