Advertisement
dim4o

Scoreboard

Sep 13th, 2015
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.09 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Wintellect.PowerCollections;
  5.  
  6. class Scoreboard
  7. {
  8.     private static Dictionary<string, string> usernameByPassword = new Dictionary<string, string>();
  9.  
  10.     private static Dictionary<string, string> gameByPassword = new Dictionary<string, string>();
  11.  
  12.     private static Dictionary<string, OrderedBag<User>> gameByScoreAndUsername =
  13.         new Dictionary<string, OrderedBag<User>>();
  14.  
  15.     private static OrderedSet<string> gameNames = new OrderedSet<string>();
  16.  
  17.     static void Main()
  18.     {
  19.         string currentLine = null;
  20.  
  21.         while (currentLine != "End")
  22.         {
  23.             currentLine = Console.ReadLine();
  24.  
  25.             if (string.IsNullOrEmpty(currentLine))
  26.             {
  27.                 continue;                
  28.             }
  29.  
  30.             var commandsArr = currentLine.Split(' ');
  31.             var command = commandsArr[0];
  32.  
  33.             switch (command)
  34.             {
  35.                 case "RegisterUser":
  36.                     var regUsername = commandsArr[1];
  37.                     var regPasss = commandsArr[2];
  38.                     RegisterUser(regUsername, regPasss);
  39.                     break;
  40.                 case "RegisterGame":
  41.                     var regGameName = commandsArr[1];
  42.                     var gamePasss = commandsArr[2];
  43.                     RegisterGame(regGameName, gamePasss);
  44.                     break;
  45.                 case "AddScore":
  46.                     var regUser = commandsArr[1];
  47.                     var regPassord = commandsArr[2];
  48.                     var gameName = commandsArr[3];
  49.                     var gamePassword = commandsArr[4];
  50.                     int score = int.Parse(commandsArr[5]);
  51.                     AddScore(regUser, regPassord, gameName, gamePassword, score);
  52.                     break;
  53.                 case "ShowScoreboard":
  54.                     var game = commandsArr[1];
  55.                     ShowScoreboard(game);
  56.                     break;
  57.                 case "ListGamesByPrefix":
  58.                     var namePrefix = commandsArr[1];
  59.                     ListGamesByPrefix(namePrefix);
  60.                     break;
  61.                 case "DeleteGame":
  62.                     var deleteGameName = commandsArr[1];
  63.                     var deleteGamePass = commandsArr[2];
  64.                     DeleteGame(deleteGameName, deleteGamePass);
  65.                     break;
  66.             }
  67.         }
  68.     }
  69.     private static void ListGamesByPrefix(string namePrefix)
  70.     {
  71.         var prefixRange = gameNames.Range(namePrefix, true, namePrefix + "z", false)
  72.             .Where(g => g.StartsWith(namePrefix)).Take(10);
  73.  
  74.         if (prefixRange.Any())
  75.         {
  76.             Console.WriteLine(string.Join(", ", prefixRange));
  77.             return;
  78.         }
  79.  
  80.         Console.WriteLine("No matches");
  81.     }
  82.     private static void DeleteGame(string gameNameForDelete, string gamePassForDelete)
  83.     {
  84.         if (!gameByPassword.ContainsKey(gameNameForDelete) ||
  85.             gameByPassword[gameNameForDelete] != gamePassForDelete)
  86.         {
  87.             Console.WriteLine("Cannot delete game");
  88.             return;
  89.         }
  90.         gameByPassword.Remove(gameNameForDelete);
  91.  
  92.         if (gameByScoreAndUsername.ContainsKey(gameNameForDelete))
  93.         {
  94.             gameByScoreAndUsername.Remove(gameNameForDelete);
  95.         }
  96.         gameNames.Remove(gameNameForDelete);
  97.  
  98.         Console.WriteLine("Game deleted");
  99.     }
  100.  
  101.     private static void ShowScoreboard(string game)
  102.     {
  103.         if (!gameByScoreAndUsername.ContainsKey(game))
  104.         {
  105.             Console.WriteLine("Game not found");
  106.             return;
  107.         }
  108.         if (gameByScoreAndUsername[game].Count == 0)
  109.         {
  110.             Console.WriteLine("No score");
  111.             return;
  112.         }
  113.  
  114.         var users = gameByScoreAndUsername[game].Take(10);
  115.         var count = 1;
  116.         foreach (var u in users)
  117.         {
  118.             Console.WriteLine("#{0} {1} {2}", count, u.Username, u.Score);
  119.             count++;
  120.         }
  121.     }
  122.  
  123.     private static void AddScore(string regUser, string regPassord, string gameName, string gamePassword, int score)
  124.     {
  125.         if (!usernameByPassword.ContainsKey(regUser) ||
  126.             usernameByPassword[regUser] != regPassord)
  127.         {
  128.             Console.WriteLine("Cannot add score");
  129.             return;
  130.         }
  131.         if (!gameByPassword.ContainsKey(gameName) ||
  132.             gameByPassword[gameName] != gamePassword)
  133.         {
  134.             Console.WriteLine("Cannot add score");
  135.             return;
  136.         }
  137.  
  138.         if (!gameByScoreAndUsername.ContainsKey(gameName))
  139.         {
  140.             gameByScoreAndUsername.Add(gameName, new OrderedBag<User>());
  141.         }
  142.         var user = new User()
  143.         {
  144.             Username = regUser,
  145.             Score = score
  146.         };
  147.         gameByScoreAndUsername[gameName].Add(user);
  148.  
  149.         Console.WriteLine("Score added");
  150.     }
  151.  
  152.     private static void RegisterUser(string regUsername, string regPasss)
  153.     {
  154.         if (usernameByPassword.ContainsKey(regUsername))
  155.         {
  156.             Console.WriteLine("Duplicated user");
  157.             return;
  158.         }
  159.         usernameByPassword.Add(regUsername, regPasss);
  160.         Console.WriteLine("User registered");
  161.     }
  162.  
  163.     private static void RegisterGame(string regGameName, string gamePasss)
  164.     {
  165.         if (gameByPassword.ContainsKey(regGameName))
  166.         {
  167.             Console.WriteLine("Duplicated game");
  168.             return;
  169.         }
  170.         gameByPassword.Add(regGameName, gamePasss);
  171.         gameByScoreAndUsername.Add(regGameName, new OrderedBag<User>());
  172.         gameNames.Add(regGameName);
  173.  
  174.         Console.WriteLine("Game registered");
  175.     }
  176. }
  177.  
  178. public class User : IComparable<User>
  179. {
  180.     public string Username { get; set; }
  181.     public int Score { get; set; }
  182.  
  183.     public int CompareTo(User other)
  184.     {
  185.         var compareTo = this.Score.CompareTo(other.Score)*(-1);
  186.         if (compareTo == 0)
  187.         {
  188.             compareTo = this.Username.CompareTo(other.Username);
  189.         }
  190.  
  191.         return compareTo;
  192.     }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement