tsekotsolov

SpyGram

Nov 29th, 2017
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.90 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text.RegularExpressions;
  4.  
  5. namespace P02_SpyGram
  6. {
  7.     class P02_SpyGram
  8.     {
  9.         static void Main()
  10.         {
  11.             var privateKeyInitial = Console.ReadLine();
  12.  
  13.             var message = Console.ReadLine();
  14.  
  15.             var messageBox = new SortedDictionary<string, List<string>>();
  16.  
  17.             while (message != "END")
  18.             {
  19.                 bool isMessage = ChecksValidity(message);
  20.  
  21.                 if (isMessage)
  22.                 {
  23.                     MessageProcess(privateKeyInitial, message, messageBox);
  24.  
  25.                 }
  26.                 message = Console.ReadLine();
  27.             }
  28.  
  29.             PrintResult(messageBox);
  30.  
  31.         }
  32.  
  33.         private static bool ChecksValidity(string message)
  34.         {
  35.             bool isMessage = false;
  36.  
  37.             var pattern = @"(TO:\s[A-Z]+;)(\sMESSAGE:.+)";
  38.  
  39.             if (Regex.IsMatch(message, pattern))
  40.             {
  41.                 isMessage = true;
  42.             }
  43.  
  44.             return isMessage;
  45.         }
  46.         private static string KeyEqualizer(string privateKey, string message)
  47.         {
  48.             if (message.Length > privateKey.Length)
  49.             {
  50.                 var delta = message.Length - privateKey.Length;
  51.  
  52.                 for (int i = 0; i < delta; i++)
  53.                 {
  54.                     privateKey = privateKey + privateKey[i];
  55.                 }
  56.  
  57.             }
  58.  
  59.             return privateKey;
  60.         }
  61.         private static void MessageProcess(string privateKeyInitial, string message, SortedDictionary<string, List<string>> messageBox)
  62.         {
  63.             var privateKey = KeyEqualizer(privateKeyInitial, message);
  64.  
  65.             var patternName = @"(?<=\s)[A-Z]+(?=;)";
  66.             var name = Regex.Match(message, patternName).ToString();
  67.             var encodedMessage = string.Empty;
  68.             var messageList = new List<string>();
  69.  
  70.             var count = 0;
  71.             foreach (var symbol in message)
  72.             {
  73.                 var currentKey = privateKey[count++].ToString();
  74.                 var currentCharASCIINumber = symbol + int.Parse(currentKey);
  75.                 var currentChar = (char)currentCharASCIINumber;
  76.                 encodedMessage = encodedMessage + currentChar;
  77.             }
  78.  
  79.             messageList.Add(encodedMessage);
  80.  
  81.             if (!messageBox.ContainsKey(name))
  82.             {
  83.                 messageBox.Add(name, messageList);
  84.             }
  85.  
  86.             else
  87.             {
  88.                 messageBox[name].AddRange(messageList);
  89.             }
  90.         }
  91.         private static void PrintResult(SortedDictionary<string, List<string>> messageBox)
  92.         {
  93.             foreach (var name in messageBox)
  94.             {
  95.                 foreach (var mes in name.Value)
  96.                 {
  97.                     Console.WriteLine(mes);
  98.                 }
  99.  
  100.             }
  101.         }
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment