Быстрая проверка символа - C#
Формулировка задачи:
Доброго времени суток в попытке реализовать шифр "Четырех квадратов"(https://ru.wikipedia.org/wiki/Шифр_четырёх_квадратов ) встретилась такая трудность , как "пропуск текста" , смысл в том что для шифрования берется два символа, по порядку и делается перестановка этих символов в четырех массивах.Смысл вопроса : так,как этот шифр моноалфавитный, он работает только с теми символами которые находятся в массивах alfavitEng - набор всех символов, мне нужна функция которая проверяла бы входимый символ с теми которые есть в матрице alfavitEng, но так как это алгоритм шифрования, мне нужно что бы это проходило как можно быстрее(я думаю, что полный перебор одного символа со всеми возможными будет не очень правильно и затратно)
Вот фрагмент класса где описан шифр:
И вывод результата шифрованияПОМОГИТЕ!!!
static public string[,] mass1 = new string[6, 6]; static public string[,] mass2 = new string[6, 6]; static public string[,] mass3 = new string[6, 6]; static public string[,] mass4 = new string[6, 6]; static string[] alfavitEng = new string[] { "q", "w", "e", "r", "t","s", "y", "u", "i", "o", "a",".", "d", "f", "g", "h", "j",",", "k", "l", "z", "x", "c","?", "v", "b", "n", "m", "p","!", " ", ":", "(", ")", "=", "-" }; ////// Расшифровка /// /// /// ///static public string EncrGeneration2Symbols(string a, string b) { int ai=0, aj=0, bi=0, bj=0; for (int str = 0; str < 6; str++) for (int stlb = 0; stlb < 6; stlb++) { if (mass2[str, stlb] == a) { ai = str; aj = stlb; } if (mass3[str, stlb] == b) { bi = str; bj = stlb; } } string slog = mass1[ai, bj] + mass4[bi, aj]; return slog; } /// /// Шифрование /// /// /// ///static public string CrGeneration2Symbols(string a, string b) { int ai = 0, aj = 0, bi = 0, bj = 0; for (int str = 0; str < 6; str++) for (int stlb = 0; stlb < 6; stlb++) { if (mass1[str, stlb] == a) { ai = str; aj = stlb; } if (mass4[str, stlb] == b) { bi = str; bj = stlb; } } string slog = mass2[ai, bj] + mass3[bi, aj]; return slog; } /// /// Генерирует ключ из 4-ох квадратов /// static public void Generation4MassEng() { int[,] c1, c2, c3, c4 = new int[6,6]; Random rand = new Random(); c1 = GetRandomMatrix(6, 6); c2 = GetRandomMatrix(6, 6); c3 = GetRandomMatrix(6, 6); c4 = GetRandomMatrix(6, 6); for (int i = 0; i < 6; i++) for (int j = 0; j < 6; j++) { mass1[i, j] = alfavitEng[c1[i, j]];//Верхний слева mass2[i, j] = alfavitEng[c2[i, j]];//Верхний справа mass3[i, j] = alfavitEng[c3[i, j]];//Нижний слева mass4[i, j] = alfavitEng[c4[i, j]];//Нижний вправо } } static Random rnd = new Random(); ////// Генерирует массив случайных чисел /// /// /// ///static int[,] GetRandomMatrix(int rowCount, int colCount) { int[,] matrix = new int[rowCount, colCount]; int[] array = Enumerable.Range(0, rowCount * colCount).OrderBy(x => rnd.Next()).ToArray(); for (int i = 0; i < rowCount; i++) for (int j = 0; j < colCount; j++) matrix[i, j] = array[i * colCount + j]; return matrix; }
foreach (string a in textBox1.Lines) { string[] a1 = new string[a.Length+1]; for (int i = 0 ; i < a.Length; i++) { a1[i] = Convert.ToString(a[i]); } if ((a.Length) == 1) { a1[a.Length] = "a"; } for (int i = 0; i < (a1.Length/2); i++) { string c1 = a1[i*2]; //c1 = c1.ToLower(); string c2 = a1[i*2+1]; //c2 = c2.ToLower(); textBox2.Text += Algoritms.CrGeneration2Symbols(c1, c2); } }
Решение задачи: «Быстрая проверка символа»
textual
Листинг программы
case 'a': case 'b': case 'c': case 'd': case 'e': .... return true; default: return false;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д