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()); }
private void FillGridView() { var symbolsCodes = _huffmanCoder.GetSymbolsCodes(); dataGridView1.Rows.Add(symbolsCodes.Count); int i = 0; foreach (var symbolCode in symbolsCodes) { switch (symbolCode.Key) { case ' ': dataGridView1.Rows[i].Cells[0].Value = "SPACE"; break; case '\t': dataGridView1.Rows[i].Cells[0].Value = "TAB"; break; case '\n': dataGridView1.Rows[i].Cells[0].Value = "ENTER"; break; default: dataGridView1.Rows[i].Cells[0].Value = symbolCode.Key; break; } dataGridView1.Rows[i].Cells[1].Value = SymbolsOperations.BoolListToBitString(symbolCode.Value); i++; } }
public string CodeEncode(string text, object key, Language language) { int numberKey = Convert.ToInt32(key); var alphabet = SymbolsOperations.GetAlphabet(language); var lettersQuantity = alphabet.Length; var result = new StringBuilder(); foreach (var letter in text) { var letterIndexInAlphabet = alphabet.IndexOf(char.ToUpper(letter)); if (letterIndexInAlphabet < 0) { result.Append(letter.ToString()); } else { var codedLetterIndexDirty = (lettersQuantity + letterIndexInAlphabet + numberKey) % lettersQuantity; var codedLetterIndex = codedLetterIndexDirty >= 0 ? codedLetterIndexDirty : (lettersQuantity + codedLetterIndexDirty); var codedLetter = char.IsLower(letter) ? char.ToLower(alphabet[codedLetterIndex]) : char.ToUpper(alphabet[codedLetterIndex]); result.Append(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()); }