public string CodeEncode(string text, object key, Language language) { var complexKey = key as ComplexKey; var alphabet = SymbolsOperations.GetAlphabet(language); var repeatedKey = GetRepeatKey(complexKey.Key, text); var result = new StringBuilder(); var alphabetLenght = alphabet.Length; int i = 0; foreach (var letter in text) { var letterIndex = alphabet.IndexOf(char.ToUpper(letter)); if (letterIndex < 0) { result.Append(letter.ToString()); } else { var codeIndex = alphabet.IndexOf(char.ToUpper(repeatedKey[i++])); var index = (alphabetLenght + letterIndex + ((complexKey.Encrypting ? 1 : -1) * codeIndex)) % alphabetLenght; var codedLetter = alphabet[index]; result.Append(SymbolsOperations.GetLetterWithProperRegister(letter, codedLetter)); } } return(result.ToString()); }
public string CodeEncode(string text, object key, Language language) { var result = new StringBuilder(); var onlyLetters = new StringBuilder(); foreach (var letter in text) { if (char.IsLetter(letter)) { onlyLetters.Append(letter); } } var frequencyTable = GetLetterFrequencyTable(language); frequencyTable = frequencyTable.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, x => x.Value); var customFrequencyTable = GetLetterFrequenceTableForText(text, onlyLetters.ToString()); customFrequencyTable = customFrequencyTable.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, x => x.Value); AddValuesToGrid(DataGridView, frequencyTable, customFrequencyTable); foreach (var letter in text) { if (!char.IsLetter(letter)) { result.Append(letter); } else { onlyLetters.Append(letter); var letterPosition = GetIndex(customFrequencyTable, char.ToLower(letter)); var codedLetter = frequencyTable.ElementAt(letterPosition).Key; codedLetter = SymbolsOperations.GetLetterWithProperRegister(letter, codedLetter); result.Append(codedLetter); } } return(result.ToString()); }