Шифр Цезаря: Как сделать сортировку в шифре, чтобы дешифратор выдал единственно верное решение - C#

Узнай цену своей работы

Формулировка задачи:

Люди, как сделать сортировку в шифре, чтобы дешифратор выдал единственно верное решение Нужно как то по этой библиотеке прогнать...
Листинг программы
  1. public static string[] errorStrCont = { "гй", "щы", "щю", "щв", "щц", "щж", "щр", "щг", "кг", "гк", "сй", "шы", "шй", "чй", "зй", "бй", "йй", "кй", "жй", "рй", "вй", "лй", "жы", "ыъ", "ъы", "ъь", "йы", "йъ", "жы", "жы", "йй", "шш", "щщ", "ъъ", "ыы", "ьь", "ээ", "аы", "аь", "гъ", "еэ", "йж", "жф", "жч", "жш", "жщ", "зп", "зщ", "йь", "оы", "уы", "уь", "фц", "хщ", "цщ", "цэ", "чщ", "чэ", "шщ", "ьы", "ыэ", "аъ", "иъ", "йъ", "къ", "лъ", "мъ", "оъ", "пъ", "ръ", "уъ", "фъ", "цъ", "чъ", "шъ", "щъ", "ыъ", "ьъ", "эъ" };
  2. public static char[] errorStrBegin = {'ъ', 'ы', 'ь'};
Вот мой код
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace ConsoleApplication29
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. Console.WriteLine("Исходный текст: КЭЧУЙЧБЗЪАДЮНЮКБИЭКЗШФДЙНОЮБМЬЙББЙБДИБЗДАКНОПЛЬЖЖ МДЛОКЯМЬРДУБНЖДИОБСЙКЗКЯДЫИЮКБЙЙКЯКПМКЮЙЫ");
  13. string Text = "КЭЧУЙЧБЗЪАДЮНЮКБИЭКЗШФДЙНОЮБМЬЙББЙБДИБЗДАКНОПЛЬЖЖМДЛОКЯМЬРДУБНЖДИОБСЙКЗКЯДЫИЮКБЙЙКЯКПМКЮЙЫ";
  14. Console.WriteLine("Укажите сдвиг:");
  15. int a = int.Parse(Console.ReadLine());
  16. for (int i = a; i < 32; i++)
  17. {
  18. Console.WriteLine(cipher(Text, -i));
  19. Console.WriteLine("Сдвиг: " + i);
  20. }
  21. Console.ReadLine();
  22. }
  23. public static string cipher(string s, int shift) //s-это исходный текст, а shift-сдвиг
  24. {
  25. StringBuilder sb = new StringBuilder(); // экземпляр класса StringBuilder, программа может изменять исходную строку
  26. shift = (shift < 0) ? 32 + shift : shift; //для отрицательных смещений
  27. foreach (char c in s.ToLower()) //пройдемся по всем буквам
  28. {
  29. int t;
  30. t = (((c - 'а') + shift) % 32) + 'а'; // работаем без пробелов
  31. sb.Append((char)t); //добавим текущий символ к результату и возьмем следующий.
  32. }
  33. return sb.ToString(); //вернем сдвинутую строку
  34. }
  35. }
  36. }

Решение задачи: «Шифр Цезаря: Как сделать сортировку в шифре, чтобы дешифратор выдал единственно верное решение»

textual
Листинг программы
  1. for (int i = a; i < 32; i++)
  2.             {
  3.                 string decripted=cipher(Text, i);
  4. //для всех буквосочетаний проверяем содержится ли оно в результате
  5. //если такое есть - переходим на следующую итерацию цикла и не выводим строку
  6.                 if(errorStrCont.Any(a=>decripted.IndexOf(a)>0)) continue;                
  7.                 Console.WriteLine(decripted);
  8.                 Console.WriteLine("Сдвиг: " + i);
  9.             }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы