SHARE
TWEET

Untitled

a guest Jan 3rd, 2018 90 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top