Advertisement
Guest User

Roli the coder

a guest
Jul 6th, 2017
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Threading.Tasks;
  7.  
  8. namespace _04_RoliTheCoder
  9. {
  10. class RoliTheCoder
  11. {
  12. static void Main(string[] args)
  13. {
  14. var input = Console.ReadLine();
  15. var idEventName = new Dictionary<int, string>();
  16. var eventNameParticipants = new Dictionary<string, List<string>>();
  17. var regex = @"(?<id>\d+)\s+#(?<eventName>[\w\d]+)(\s+(?:@\w+\s*)+)?";
  18. var namePattern = @"@[a-zA-Z0-9'-]+";
  19.  
  20. while (input != "Time for Code")
  21. {
  22. var matchedInput = Regex.Match(input, regex);
  23.  
  24. if (matchedInput.Success)
  25. {
  26. var id = int.Parse(matchedInput.Groups["id"].Value);
  27. var eventName = matchedInput.Groups["eventName"].Value;
  28.  
  29. var matchedNames = Regex.Matches(input, namePattern)
  30. .Cast<Match>()
  31. .Select(a => a.Value)
  32. .Where(a => a != "")
  33. .ToArray();
  34.  
  35. if (!idEventName.ContainsKey(id))
  36. {
  37. idEventName[id] = string.Empty;
  38. idEventName[id] = eventName;
  39. eventNameParticipants[eventName] = new List<string>();
  40. }
  41.  
  42. if (idEventName.ContainsKey(id) && !idEventName.ContainsValue(eventName))
  43. {
  44. input = Console.ReadLine();
  45. continue;
  46. }
  47.  
  48. foreach (var name in matchedNames.Where(a => a != string.Empty))
  49. {
  50. eventNameParticipants[eventName].Add(name);
  51. }
  52.  
  53. eventNameParticipants[eventName] = eventNameParticipants[eventName].Distinct().ToList();
  54. }
  55.  
  56. input = Console.ReadLine();
  57. }
  58.  
  59. foreach (var kvp in eventNameParticipants.OrderByDescending(p => p.Value.Count))
  60. {
  61. Console.WriteLine($"{kvp.Key} - {kvp.Value.Count}");
  62.  
  63. foreach (var name in kvp.Value.OrderBy(n => n))
  64. {
  65. Console.WriteLine(name);
  66. }
  67. }
  68.  
  69.  
  70. }
  71. }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement