Advertisement
sivancheva

HornetArmada

Oct 18th, 2017
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text.RegularExpressions;
  5.  
  6.  
  7. namespace _04_HornetArmada
  8. {
  9. class HornetArmada
  10. {
  11. static void Main(string[] args)
  12. {
  13.  
  14. var n = int.Parse(Console.ReadLine());
  15. var legionNameActivity = new Dictionary<string, int>();
  16. var legionNameSolder = new Dictionary<string, Dictionary<string, long>>();
  17.  
  18.  
  19. for (int i = 0; i < n; i++)
  20. {
  21. var input = Console.ReadLine();
  22. var pattern = new Regex(@"^(?<lastActivity>[\d]+)\s*=\s*(?<legionName>[^= - > : \s]+)\s*->\s*(?<soldierType>[^= - > : \s]+):(?<soldierCount>[\d]+)$");
  23. var match = pattern.Match(input);
  24.  
  25. if (!match.Success)
  26. {
  27. input = Console.ReadLine();
  28. continue;
  29. }
  30. var lastActivity = int.Parse(match.Groups["lastActivity"].Value);
  31. var legionName = match.Groups["legionName"].Value;
  32. var soldierType = match.Groups["soldierType"].Value;
  33. var soldierCount = long.Parse(match.Groups["soldierCount"].Value);
  34.  
  35.  
  36. if (!legionNameActivity.ContainsKey(legionName))
  37. {
  38. legionNameActivity.Add(legionName, lastActivity);
  39. }
  40. if (legionNameActivity[legionName] < lastActivity)
  41. {
  42. legionNameActivity[legionName] = lastActivity;
  43. }
  44.  
  45.  
  46. if (!legionNameSolder.ContainsKey(legionName))
  47. {
  48. legionNameSolder.Add(legionName, new Dictionary<string, long>());
  49. legionNameSolder[legionName].Add(soldierType, soldierCount);
  50. }
  51. else if (!legionNameSolder[legionName].ContainsKey(soldierType))
  52. {
  53. legionNameSolder[legionName].Add(soldierType, soldierCount);
  54. }
  55. else
  56. {
  57. legionNameSolder[legionName][soldierType] += soldierCount;
  58. }
  59.  
  60. }
  61. var command = Console.ReadLine();
  62. var patternCommand = new Regex(@"^(?<num>[\d]+)\\(?<soldier>[a-zA-Z]+)$");
  63. var matchedCommand = patternCommand.Match(command);
  64.  
  65. if (matchedCommand.Success)
  66. {
  67. int num = int.Parse(matchedCommand.Groups["num"].Value);
  68. string soldier = matchedCommand.Groups["soldier"].Value;
  69.  
  70. foreach (var legion in legionNameSolder
  71. .Where(x => x.Value.ContainsKey(soldier))
  72. .OrderByDescending(x => x.Value[soldier]))
  73. {
  74.  
  75. if (legionNameActivity[legion.Key] < num)
  76. {
  77. Console.WriteLine($"{legion.Key} -> {legionNameSolder[legion.Key][soldier]}");
  78. }
  79. }
  80. }
  81. else
  82. {
  83. foreach (var legion in legionNameActivity.OrderByDescending( x => x.Value))
  84. {
  85. if (legionNameSolder[legion.Key].ContainsKey(command))
  86. {
  87. Console.WriteLine($"{legion.Value} : {legion.Key}");
  88. }
  89. }
  90. }
  91. }
  92.  
  93. }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement