Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Wintellect.PowerCollections;
- class Scoreboard
- {
- private static Dictionary<string, string> usernameByPassword = new Dictionary<string, string>();
- private static Dictionary<string, string> gameByPassword = new Dictionary<string, string>();
- private static Dictionary<string, OrderedBag<User>> gameByScoreAndUsername =
- new Dictionary<string, OrderedBag<User>>();
- private static OrderedSet<string> gameNames = new OrderedSet<string>();
- static void Main()
- {
- string currentLine = null;
- while (currentLine != "End")
- {
- currentLine = Console.ReadLine();
- if (string.IsNullOrEmpty(currentLine))
- {
- continue;
- }
- var commandsArr = currentLine.Split(' ');
- var command = commandsArr[0];
- switch (command)
- {
- case "RegisterUser":
- var regUsername = commandsArr[1];
- var regPasss = commandsArr[2];
- RegisterUser(regUsername, regPasss);
- break;
- case "RegisterGame":
- var regGameName = commandsArr[1];
- var gamePasss = commandsArr[2];
- RegisterGame(regGameName, gamePasss);
- break;
- case "AddScore":
- var regUser = commandsArr[1];
- var regPassord = commandsArr[2];
- var gameName = commandsArr[3];
- var gamePassword = commandsArr[4];
- int score = int.Parse(commandsArr[5]);
- AddScore(regUser, regPassord, gameName, gamePassword, score);
- break;
- case "ShowScoreboard":
- var game = commandsArr[1];
- ShowScoreboard(game);
- break;
- case "ListGamesByPrefix":
- var namePrefix = commandsArr[1];
- ListGamesByPrefix(namePrefix);
- break;
- case "DeleteGame":
- var deleteGameName = commandsArr[1];
- var deleteGamePass = commandsArr[2];
- DeleteGame(deleteGameName, deleteGamePass);
- break;
- }
- }
- }
- private static void ListGamesByPrefix(string namePrefix)
- {
- var prefixRange = gameNames.Range(namePrefix, true, namePrefix + "z", false)
- .Where(g => g.StartsWith(namePrefix)).Take(10);
- if (prefixRange.Any())
- {
- Console.WriteLine(string.Join(", ", prefixRange));
- return;
- }
- Console.WriteLine("No matches");
- }
- private static void DeleteGame(string gameNameForDelete, string gamePassForDelete)
- {
- if (!gameByPassword.ContainsKey(gameNameForDelete) ||
- gameByPassword[gameNameForDelete] != gamePassForDelete)
- {
- Console.WriteLine("Cannot delete game");
- return;
- }
- gameByPassword.Remove(gameNameForDelete);
- if (gameByScoreAndUsername.ContainsKey(gameNameForDelete))
- {
- gameByScoreAndUsername.Remove(gameNameForDelete);
- }
- gameNames.Remove(gameNameForDelete);
- Console.WriteLine("Game deleted");
- }
- private static void ShowScoreboard(string game)
- {
- if (!gameByScoreAndUsername.ContainsKey(game))
- {
- Console.WriteLine("Game not found");
- return;
- }
- if (gameByScoreAndUsername[game].Count == 0)
- {
- Console.WriteLine("No score");
- return;
- }
- var users = gameByScoreAndUsername[game].Take(10);
- var count = 1;
- foreach (var u in users)
- {
- Console.WriteLine("#{0} {1} {2}", count, u.Username, u.Score);
- count++;
- }
- }
- private static void AddScore(string regUser, string regPassord, string gameName, string gamePassword, int score)
- {
- if (!usernameByPassword.ContainsKey(regUser) ||
- usernameByPassword[regUser] != regPassord)
- {
- Console.WriteLine("Cannot add score");
- return;
- }
- if (!gameByPassword.ContainsKey(gameName) ||
- gameByPassword[gameName] != gamePassword)
- {
- Console.WriteLine("Cannot add score");
- return;
- }
- if (!gameByScoreAndUsername.ContainsKey(gameName))
- {
- gameByScoreAndUsername.Add(gameName, new OrderedBag<User>());
- }
- var user = new User()
- {
- Username = regUser,
- Score = score
- };
- gameByScoreAndUsername[gameName].Add(user);
- Console.WriteLine("Score added");
- }
- private static void RegisterUser(string regUsername, string regPasss)
- {
- if (usernameByPassword.ContainsKey(regUsername))
- {
- Console.WriteLine("Duplicated user");
- return;
- }
- usernameByPassword.Add(regUsername, regPasss);
- Console.WriteLine("User registered");
- }
- private static void RegisterGame(string regGameName, string gamePasss)
- {
- if (gameByPassword.ContainsKey(regGameName))
- {
- Console.WriteLine("Duplicated game");
- return;
- }
- gameByPassword.Add(regGameName, gamePasss);
- gameByScoreAndUsername.Add(regGameName, new OrderedBag<User>());
- gameNames.Add(regGameName);
- Console.WriteLine("Game registered");
- }
- }
- public class User : IComparable<User>
- {
- public string Username { get; set; }
- public int Score { get; set; }
- public int CompareTo(User other)
- {
- var compareTo = this.Score.CompareTo(other.Score)*(-1);
- if (compareTo == 0)
- {
- compareTo = this.Username.CompareTo(other.Username);
- }
- return compareTo;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement