Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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++;
            }
        }
Exemplo n.º 3
0
        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());
        }
Exemplo n.º 4
0
        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());
        }