Шифр Цезаря: Как сделать сортировку в шифре, чтобы дешифратор выдал единственно верное решение - 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);
}