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

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

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

Люди, как сделать сортировку в шифре, чтобы дешифратор выдал единственно верное решение Нужно как то по этой библиотеке прогнать...
        public static string[] errorStrCont = { "гй", "щы", "щю", "щв", "щц", "щж", "щр", "щг", "кг", "гк", "сй", "шы", "шй", "чй", "зй", "бй", "йй", "кй", "жй", "рй", "вй", "лй", "жы", "ыъ", "ъы", "ъь", "йы", "йъ", "жы", "жы", "йй", "шш", "щщ", "ъъ", "ыы", "ьь", "ээ", "аы", "аь", "гъ", "еэ", "йж", "жф", "жч", "жш", "жщ", "зп", "зщ", "йь", "оы", "уы", "уь", "фц", "хщ", "цщ", "цэ", "чщ", "чэ", "шщ", "ьы", "ыэ", "аъ", "иъ", "йъ", "къ", "лъ", "мъ", "оъ", "пъ", "ръ", "уъ", "фъ", "цъ", "чъ", "шъ", "щъ", "ыъ", "ьъ", "эъ" };
        public static char[] errorStrBegin = {'ъ', 'ы', 'ь'};
Вот мой код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication29
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Исходный текст: КЭЧУЙЧБЗЪАДЮНЮКБИЭКЗШФДЙНОЮБМЬЙББЙБДИБЗДАКНОПЛЬЖЖ МДЛОКЯМЬРДУБНЖДИОБСЙКЗКЯДЫИЮКБЙЙКЯКПМКЮЙЫ");
            string Text = "КЭЧУЙЧБЗЪАДЮНЮКБИЭКЗШФДЙНОЮБМЬЙББЙБДИБЗДАКНОПЛЬЖЖМДЛОКЯМЬРДУБНЖДИОБСЙКЗКЯДЫИЮКБЙЙКЯКПМКЮЙЫ";
            Console.WriteLine("Укажите сдвиг:");
            int a = int.Parse(Console.ReadLine());
            for (int i = a; i < 32; i++)
            {
                Console.WriteLine(cipher(Text, -i));
                Console.WriteLine("Сдвиг: " + i);
            }
            Console.ReadLine();
        }
        public static string cipher(string s, int shift) //s-это исходный текст, а shift-сдвиг
        {
            StringBuilder sb = new StringBuilder(); // экземпляр класса StringBuilder, программа может изменять исходную строку
            shift = (shift < 0) ? 32 + shift : shift; //для отрицательных смещений
            foreach (char c in s.ToLower()) //пройдемся по всем буквам
            {
                int t;
                t = (((c - 'а') + shift) % 32) + 'а'; // работаем без пробелов
                sb.Append((char)t); //добавим текущий символ к результату и возьмем следующий.
            }
            return sb.ToString(); //вернем сдвинутую строку
        }
    }
}

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

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

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


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

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

13   голосов , оценка 4.077 из 5
Похожие ответы