Advertisement
Guest User

Untitled

a guest
Jan 3rd, 2018
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.94 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. using System.Numerics;
  8.  
  9. namespace _04.Trainlands
  10. {
  11. class Program
  12. {
  13. static void Main(string[] args)
  14. {
  15.  
  16. // Правилния начин да се доближаваме до задачи който имат равенства и използват речници
  17.  
  18. Dictionary<string, Dictionary<string, long>> trainStation = new Dictionary<string, Dictionary<string, long>>();
  19.  
  20. string validInputPattern = @"^(?<trainName>[^ \-:>=]+?) -> (?<wagonName>[^ \-:>=]+?) : (?<wagonPower>[\d]+?)$";
  21. string input = string.Empty;
  22.  
  23. string addWagonsPatternToTrain = @"^(?<leftsideTrainName>[^ \-:>=]+?) -> (?<rightsideWagonName>[^ \-:>=]+?)$";
  24. string equalPattern = @"^(?<leftside>[^ \-:>=]+?) = (?<rightside>[^ \-:>=]+?)$";
  25.  
  26. while ((input = Console.ReadLine()) != "It's Training Men!")
  27. {
  28. // ако ще въвеждаме команд {trainName} -> {wagonName} : {wagonPower}
  29.  
  30. if (Regex.IsMatch(input, validInputPattern))
  31. {
  32. Match infoToken = Regex.Match(input, validInputPattern);
  33. string trainName = infoToken.Groups["trainName"].Value;
  34. string wagonName = infoToken.Groups["wagonName"].Value;
  35. int wagonPower = int.Parse(infoToken.Groups["wagonPower"].Value);
  36.  
  37. //Creates a train with the given name and adds a wagon to it with the given name and power.
  38. //If the train already exists ,
  39. // ... it just adds the given "wagon" to it.
  40.  
  41. if (!trainStation.ContainsKey(trainName))
  42. {
  43. trainStation[trainName] = new Dictionary<string, long>();
  44. }
  45.  
  46. if (!trainStation[trainName].ContainsKey(wagonName))
  47. {
  48. trainStation[trainName][wagonName] = 0;
  49. }
  50.  
  51. if (trainStation[trainName].ContainsKey(wagonName))
  52. {
  53. trainStation[trainName][wagonName] += wagonPower; // trainStation[trainName][wagonName] = wagonPower;
  54. }
  55. }
  56.  
  57. // ако ще въвеждаме команд {trainName} -> {otherTrainName}
  58.  
  59. if (Regex.IsMatch(input, addWagonsPatternToTrain))
  60. {
  61. Match sides = Regex.Match(input, addWagonsPatternToTrain);
  62. string leftsidetrainName = sides.Groups["leftsideTrainName"].Value;
  63. string rightsidetrainName = sides.Groups["rightsideWagonName"].Value;
  64.  
  65. // ако не съществува лявата страна
  66.  
  67. if (!trainStation.ContainsKey(leftsidetrainName) && trainStation.ContainsKey(rightsidetrainName))
  68. {
  69.  
  70. trainStation[leftsidetrainName] = new Dictionary<string, long>();
  71.  
  72. // Метод 1 <- могат да се появят грешки
  73. ////trainStation[leftsidetrainName] = trainStation[rightsidetrainName];
  74.  
  75. // Метод 2
  76. foreach (var wagon in trainStation[rightsidetrainName])
  77. {
  78. trainStation[leftsidetrainName].Add(wagon.Key, wagon.Value);
  79. }
  80.  
  81. trainStation.Remove(rightsidetrainName);
  82.  
  83.  
  84. }
  85. else // ако съществува лявата страна
  86. {
  87. foreach (var wagon in trainStation[rightsidetrainName])
  88. {
  89. trainStation[leftsidetrainName].Add(wagon.Key, wagon.Value);
  90. }
  91. trainStation.Remove(rightsidetrainName);
  92. }
  93.  
  94. }
  95.  
  96. //// ако ще въвеждаме команд {trainName} = {otherTrainName}
  97.  
  98. if (Regex.IsMatch(input, equalPattern))
  99. {
  100. Match sides = Regex.Match(input, equalPattern);
  101. string leftsidetrainName = sides.Groups["leftside"].Value;
  102. string rightsidetrainName = sides.Groups["rightside"].Value;
  103.  
  104. //// МЕТОД 1-- > ТУКА ИМА ГРЕШКА ... КАКВА Е ....
  105. //if (!trainStation.ContainsKey(leftsidetrainName)) //&& trainStation.ContainsKey(rightsidetrainName))
  106. //{
  107. // trainStation[leftsidetrainName] = new Dictionary<string, long>();
  108. // trainStation[leftsidetrainName] = trainStation[rightsidetrainName];
  109. //}
  110. //else // ако съществува лявата страна ---> // тука е грешката
  111. //{
  112. // trainStation[leftsidetrainName] = trainStation[rightsidetrainName];
  113. //}
  114.  
  115. // ето защо :
  116. //Kivil -> KAKA : 1387
  117. //Zone -> Gh : 4081
  118. //Kivil -> RAMZES666 : 4677
  119. //Desolator -> MiraclE~ : 8432
  120. //Zone = Kivil
  121. //Kivil -> NewOne : 2000
  122. //It's Training Men!
  123.  
  124. // МЕТОД 2
  125. if (!trainStation.ContainsKey(leftsidetrainName))
  126. {
  127. trainStation[leftsidetrainName] = new Dictionary<string, long>();
  128. }
  129.  
  130. trainStation[leftsidetrainName].Clear(); // защо е нужно Clear()
  131. // защото когато има съществуващ
  132.  
  133. foreach (var wagons in trainStation[rightsidetrainName])
  134. {
  135. trainStation[leftsidetrainName].Add(wagons.Key, wagons.Value);
  136. }
  137.  
  138. }
  139. }
  140.  
  141. // Output
  142.  
  143. foreach (var train in trainStation
  144. .OrderByDescending(x => x.Value.Values.Sum())
  145. .ThenBy(x => x.Value.Count))
  146. {
  147. string trainToken = train.Key;
  148. var wagonsAndPowers = train.Value;
  149.  
  150. Console.WriteLine($"Train: {trainToken}");
  151.  
  152. foreach (var wagonAndPower in wagonsAndPowers.OrderByDescending(x => x.Value))
  153. {
  154. string wagon = wagonAndPower.Key;
  155. long power = wagonAndPower.Value;
  156.  
  157. Console.WriteLine($"###{wagon} - {power}");
  158. }
  159. }
  160.  
  161. }
  162. }
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement