Infiniti_Inter

Шифр Цезаря

Oct 7th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.21 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace mainSolution
  7. {
  8.     class Input
  9.     {
  10.         private static IEnumerator<string> getin()
  11.         {
  12.             while (true)
  13.                 foreach (string s in Console.ReadLine().Split().Where(x => x.Length > 0))
  14.                     yield return s;
  15.         }
  16.  
  17.         private IEnumerator<string> inp = getin();
  18.  
  19.         public string GetString() { inp.MoveNext(); return inp.Current; }
  20.         public int GetInt() { return int.Parse(GetString()); }
  21.         public long GetLong() { return long.Parse(GetString()); }
  22.         public double GetDouble() { return double.Parse(GetString()); }
  23.     }
  24.     static class Program
  25.     {
  26.  
  27.         const int MOD = 'я' - 'а' + 1;
  28.         static string Generator(string s, int shift)
  29.         {
  30.             shift %= MOD;
  31.             StringBuilder res = new StringBuilder();
  32.             for (int i = 0; i < s.Length; i++)
  33.             {
  34.                 if (char.IsLetter(s[i]))
  35.                 {
  36.                     char nxt = (char)(char.ToLower(s[i]) + shift);
  37.                     if (nxt > 'я')
  38.                         nxt -= (char)(MOD);
  39.                     res.Append(nxt);
  40.                 }
  41.                 else
  42.                     res.Append(s[i]);
  43.  
  44.             }
  45.             return res.ToString();
  46.         }
  47.  
  48.  
  49.         public class Pair<T, K>
  50.         {
  51.             public T First { get; set; }
  52.             public K Second { get; set; }
  53.         }
  54.  
  55.  
  56.         static List<Pair<int, int>>  countOfChar(string s)
  57.         {
  58.             List< Pair<int, int> > res = new List< Pair<int, int> >(100);
  59.             for (int i = 0; i < 100; i++)
  60.             {
  61.                 res.Add(new Pair<int,int> ());
  62.                 res[i].Second = i;
  63.             }
  64.            
  65.            
  66.             for (int i = 0; i < s.Length; i++)
  67.             {
  68.                 char cur = s[i];
  69.                 if (char.IsPunctuation(cur) || char.IsWhiteSpace(cur))
  70.                     continue;
  71.                 else
  72.                     res[cur - 'а'].First++;
  73.             }
  74.             res.Sort((x, y) => y.First.CompareTo(x.First));
  75.             return res;
  76.  
  77.         }
  78.  
  79.  
  80.         static StringBuilder NextPermutation (string s, int letter)
  81.         {
  82.             int shift = letter - 'о' + 'а';
  83.             StringBuilder res = new StringBuilder();
  84.             for (int i = 0; i < s.Length; i++)
  85.             {
  86.                 char cur = s[i];
  87.                 if (char.IsPunctuation(cur) || char.IsWhiteSpace(cur))
  88.                 {
  89.                     res.Append(cur);
  90.                     continue;
  91.                 }
  92.                 cur -= (char)shift;
  93.                 if (cur < 'а')
  94.                     cur += (char)MOD;
  95.                 res.Append(cur);
  96.             }
  97.             return res;
  98.  
  99.         }
  100.         static void Main(string[] args)
  101.         {
  102.             Console.WriteLine("Введите исходный текст:\n");
  103.             Input cin = new Input();
  104.             string s = Console.ReadLine();
  105.             Console.Write("\nВведите свиг: ");
  106.             int shift = cin.GetInt();
  107.             s = Generator(s, shift);
  108.             Console.WriteLine($"\nСдвинутая на {shift} строка:\n");
  109.             Console.WriteLine(s);
  110.            
  111.             List<Pair<int, int>> count;
  112.             count = countOfChar(s);
  113.             //for (int i = 0; i < count.Count; i++)
  114.             //{
  115.             //    Console.WriteLine($"{i+1}   {count[i].First} --- {count[i].Second}");
  116.             //}
  117.  
  118.             Console.WriteLine("\nВозможный ответ:\n");
  119.             StringBuilder answer = new StringBuilder();
  120.             int it = 0;
  121.             while (true)
  122.             {
  123.                 answer = NextPermutation(s, count[it++].Second);
  124.                 Console.WriteLine(answer);
  125.                 Console.WriteLine("\nif answer is correct, press \"Enter\"\n");
  126.                 ConsoleKeyInfo cki = Console.ReadKey();
  127.                
  128.                 if (cki.Key == ConsoleKey.Enter)
  129.                     break;
  130.                 Console.WriteLine("\n\nВозможный ответ:\n");
  131.  
  132.             }
  133.         }
  134.  
  135.  
  136.     }
  137.     }
Add Comment
Please, Sign In to add comment