Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Text;
- using Wintellect.PowerCollections;
- namespace PlayerRanking
- {
- class Player : IComparable<Player>
- {
- public Player(string name, string type, int age, int position)
- {
- this.Name = name;
- this.Type = type;
- this.Age = age;
- this.Position = position;
- }
- public string Name
- {
- get;
- private set;
- }
- public string Type
- {
- get;
- private set;
- }
- public int Age
- {
- get;
- private set;
- }
- public int Position
- {
- get;
- private set;
- }
- public int CompareTo(Player other)
- {
- int comparisson = this.Name.CompareTo(other.Name);
- if (comparisson == 0)
- {
- comparisson = other.Age.CompareTo(this.Age);
- }
- return comparisson;
- }
- public override string ToString()
- {
- return $"{this.Name}({this.Age})";
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- playersByType = new Dictionary<string, SortedSet<Player>>();
- playersByRanking = new BigList<Player>();
- results = new StringBuilder();
- var sw = new Stopwatch();
- sw.Start();
- //FakeInput();
- string nextLine;
- while ((nextLine = Console.ReadLine()) != "end")
- {
- string[] command = nextLine.Split().ToArray();
- switch (command[0])
- {
- case "add":
- results.AppendLine(AddPlayer(command));
- break;
- case "find":
- results.AppendLine(FindPlayer(command));
- break;
- case "ranklist":
- results.AppendLine(GetRanklist(command));
- break;
- }
- //command = Console.ReadLine().Split();
- }
- Console.WriteLine(results);
- sw.Stop();
- //Console.WriteLine(sw.ElapsedMilliseconds);
- }
- static Dictionary<string, SortedSet<Player>> playersByType;
- static BigList<Player> playersByRanking;
- static StringBuilder results;
- private static string AddPlayer(string[] command)
- {
- var inputName = command[1];
- var inputType = command[2];
- var inputAge = int.Parse(command[3]);
- var inputPosition = int.Parse(command[4]);
- var newPlayer = new Player(inputName, inputType, inputAge, inputPosition);
- if (!playersByType.ContainsKey(inputType))
- {
- playersByType.Add(inputType, new SortedSet<Player>());
- }
- playersByType[inputType].Add(newPlayer);
- playersByRanking.Insert(inputPosition - 1, newPlayer);
- return $"Added player {inputName} to position {inputPosition}";
- }
- private static string FindPlayer(string[] command)
- {
- var inputType = command[1];
- if (!playersByType.ContainsKey(inputType))
- {
- return $"Type {inputType}: ";
- }
- else
- {
- var output = $"Type {inputType}: " + string.Join("; ", playersByType[inputType].Take(5));
- return output;
- }
- }
- private static string GetRanklist(string[] command)
- {
- int start = int.Parse(command[1]) - 1;
- int end = int.Parse(command[2]) - 1;
- var output = new StringBuilder();
- var range = playersByRanking.GetRange(start, end + 1 - start).ToArray();
- int position = start + 1;
- for (int i = 0; i < range.Length; i++)
- {
- output.Append($"{position++}. {range[i].ToString()}; ");
- }
- //foreach (var item in range)
- //{
- // output.Append($"{position++}. {item.ToString()}; ");
- //}
- //return string.Join("; ",range);
- return output.ToString().TrimEnd(new char[] { ';', ' ' });
- }
- private static void FakeInput()
- {
- var generate = new StringBuilder();
- for (int i = 0; i < 5000; i++)
- {
- generate.AppendLine(@"add Ivan Aggressive 20 1
- add Pesho Defensive 25 2
- add Georgi Neutral 30 3
- add Stamat Aggressive 22 2
- ranklist 1 2
- add Stamat Aggressive 40 1
- ranklist 1 3
- add Stamat Aggressive 40 1
- add Stamat Aggressive 40 1
- add Stamat Aggressive 40 1
- add Stamat Aggressive 40 1
- ranklist 1 5
- add Stamat Aggressive 40 1
- add Stamat Aggressive 40 1
- add Stamat Aggressive 40 1
- add Stamat Aggressive 40 1
- add Stamat Aggressive 40 1
- add Stamat Aggressive 40 1
- ranklist 10 15
- add Stamat Aggressive 40 1
- ranklist 10 15
- add Stamat Aggressive 40 1
- add Stamat Aggressive 40 1
- ranklist 10 15
- add Pesho Defensive 25 2
- add Georgi Neutral 30 3
- add Stamat Aggressive 22 2
- ranklist 10 15
- add Stamat Aggressive 40 1
- add Pesho Defensive 25 2
- ranklist 10 15
- add Georgi Neutral 30 3
- ranklist 10 15
- add Stamat Aggressive 22 2
- add Stamat Aggressive 40 1
- add Pesho Defensive 25 2
- add Georgi Neutral 30 3
- ranklist 10 15
- add Stamat Aggressive 22 2
- add Stamat Aggressive 40 1
- ranklist 10 15
- add Pesho Defensive 25 2
- add Georgi Neutral 30 3
- add Stamat Aggressive 22 2
- ranklist 10 15
- add Stamat Aggressive 40 1
- find Aggressive
- ranklist 10 15");
- }
- generate.AppendLine("end");
- var fakeInput = generate.ToString();
- Console.SetIn(new StringReader(fakeInput));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement