Advertisement
Guest User

PlayerRanking

a guest
Mar 21st, 2019
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.97 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7. using Wintellect.PowerCollections;
  8.  
  9. namespace PlayerRanking
  10. {
  11.     class Player : IComparable<Player>
  12.     {
  13.         public Player(string name, string type, int age, int position)
  14.         {
  15.             this.Name = name;
  16.             this.Type = type;
  17.             this.Age = age;
  18.             this.Position = position;
  19.         }
  20.  
  21.         public string Name
  22.         {
  23.             get;
  24.             private set;
  25.         }
  26.         public string Type
  27.         {
  28.             get;
  29.             private set;
  30.         }
  31.         public int Age
  32.         {
  33.             get;
  34.             private set;
  35.         }
  36.         public int Position
  37.         {
  38.             get;
  39.             private set;
  40.         }
  41.  
  42.         public int CompareTo(Player other)
  43.         {
  44.             int comparisson = this.Name.CompareTo(other.Name);
  45.             if (comparisson == 0)
  46.             {
  47.                 comparisson = other.Age.CompareTo(this.Age);
  48.             }
  49.             return comparisson;
  50.         }
  51.         public override string ToString()
  52.         {
  53.             return $"{this.Name}({this.Age})";
  54.         }
  55.     }
  56.  
  57.     class Program
  58.     {
  59.         static void Main(string[] args)
  60.         {
  61.             playersByType = new Dictionary<string, SortedSet<Player>>();
  62.             playersByRanking = new BigList<Player>();
  63.             results = new StringBuilder();
  64.             var sw = new Stopwatch();
  65.             sw.Start();
  66.             //FakeInput();
  67.             string nextLine;
  68.  
  69.             while ((nextLine = Console.ReadLine()) != "end")
  70.             {
  71.                 string[] command = nextLine.Split().ToArray();
  72.                 switch (command[0])
  73.                 {
  74.                     case "add":
  75.                         results.AppendLine(AddPlayer(command));
  76.                         break;
  77.                     case "find":
  78.                         results.AppendLine(FindPlayer(command));
  79.                         break;
  80.                     case "ranklist":
  81.                         results.AppendLine(GetRanklist(command));
  82.                         break;
  83.                 }
  84.  
  85.                 //command = Console.ReadLine().Split();
  86.             }
  87.             Console.WriteLine(results);
  88.             sw.Stop();
  89.             //Console.WriteLine(sw.ElapsedMilliseconds);
  90.  
  91.         }
  92.  
  93.         static Dictionary<string, SortedSet<Player>> playersByType;
  94.         static BigList<Player> playersByRanking;
  95.         static StringBuilder results;
  96.  
  97.         private static string AddPlayer(string[] command)
  98.         {
  99.             var inputName = command[1];
  100.             var inputType = command[2];
  101.             var inputAge = int.Parse(command[3]);
  102.             var inputPosition = int.Parse(command[4]);
  103.  
  104.             var newPlayer = new Player(inputName, inputType, inputAge, inputPosition);
  105.  
  106.             if (!playersByType.ContainsKey(inputType))
  107.             {
  108.                 playersByType.Add(inputType, new SortedSet<Player>());
  109.             }
  110.             playersByType[inputType].Add(newPlayer);
  111.             playersByRanking.Insert(inputPosition - 1, newPlayer);
  112.  
  113.             return $"Added player {inputName} to position {inputPosition}";
  114.         }
  115.  
  116.         private static string FindPlayer(string[] command)
  117.         {
  118.             var inputType = command[1];
  119.  
  120.             if (!playersByType.ContainsKey(inputType))
  121.             {
  122.                 return $"Type {inputType}: ";
  123.             }
  124.             else
  125.             {
  126.                 var output = $"Type {inputType}: " + string.Join("; ", playersByType[inputType].Take(5));
  127.                 return output;
  128.             }
  129.         }
  130.  
  131.         private static string GetRanklist(string[] command)
  132.         {
  133.             int start = int.Parse(command[1]) - 1;
  134.             int end = int.Parse(command[2]) - 1;
  135.             var output = new StringBuilder();
  136.  
  137.             var range = playersByRanking.GetRange(start, end + 1 - start).ToArray();
  138.             int position = start + 1;
  139.  
  140.             for (int i = 0; i < range.Length; i++)
  141.             {
  142.                 output.Append($"{position++}. {range[i].ToString()}; ");
  143.             }
  144.             //foreach (var item in range)
  145.             //{
  146.             //    output.Append($"{position++}. {item.ToString()}; ");
  147.             //}
  148.             //return string.Join("; ",range);
  149.  
  150.             return output.ToString().TrimEnd(new char[] { ';', ' ' });
  151.         }
  152.  
  153.         private static void FakeInput()
  154.         {
  155.             var generate = new StringBuilder();
  156.             for (int i = 0; i < 5000; i++)
  157.             {
  158.                 generate.AppendLine(@"add Ivan Aggressive 20 1
  159. add Pesho Defensive 25 2
  160. add Georgi Neutral 30 3
  161. add Stamat Aggressive 22 2
  162. ranklist 1 2
  163. add Stamat Aggressive 40 1
  164. ranklist 1 3
  165. add Stamat Aggressive 40 1
  166. add Stamat Aggressive 40 1
  167. add Stamat Aggressive 40 1
  168. add Stamat Aggressive 40 1
  169. ranklist 1 5
  170. add Stamat Aggressive 40 1
  171. add Stamat Aggressive 40 1
  172. add Stamat Aggressive 40 1
  173. add Stamat Aggressive 40 1
  174. add Stamat Aggressive 40 1
  175. add Stamat Aggressive 40 1
  176. ranklist 10 15
  177. add Stamat Aggressive 40 1
  178. ranklist 10 15
  179. add Stamat Aggressive 40 1
  180. add Stamat Aggressive 40 1
  181. ranklist 10 15
  182. add Pesho Defensive 25 2
  183. add Georgi Neutral 30 3
  184. add Stamat Aggressive 22 2
  185. ranklist 10 15
  186. add Stamat Aggressive 40 1
  187. add Pesho Defensive 25 2
  188. ranklist 10 15
  189. add Georgi Neutral 30 3
  190. ranklist 10 15
  191. add Stamat Aggressive 22 2
  192. add Stamat Aggressive 40 1
  193. add Pesho Defensive 25 2
  194. add Georgi Neutral 30 3
  195. ranklist 10 15
  196. add Stamat Aggressive 22 2
  197. add Stamat Aggressive 40 1
  198. ranklist 10 15
  199. add Pesho Defensive 25 2
  200. add Georgi Neutral 30 3
  201. add Stamat Aggressive 22 2
  202. ranklist 10 15
  203. add Stamat Aggressive 40 1
  204. find Aggressive
  205. ranklist 10 15");
  206.             }
  207.             generate.AppendLine("end");
  208.             var fakeInput = generate.ToString();
  209.             Console.SetIn(new StringReader(fakeInput));
  210.         }
  211.     }
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement