Esempio n. 1
0
        private IList <LetterStats> FillSingleLetterStats()
        {
            var dictLetter = new Dictionary <char, LetterStats>();

            _stream.ResetPositionToStart();
            while (!_stream.IsEof)
            {
                char c = _stream.ReadNextChar();
                if (!char.IsLetter(c))
                {
                    continue;
                }

                if (!dictLetter.ContainsKey(c))
                {
                    dictLetter[c] = new LetterStats {
                        Letter = c
                    };
                }

                dictLetter[c].IncStatistic();
            }

            return(dictLetter.Values.ToList());
        }
Esempio n. 2
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> listStats = new List <LetterStats>();
            char previousChar            = Char.MinValue;

            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char currentChar = stream.ReadNextChar();
                if (char.IsLetter(currentChar))
                {
                    if (char.ToLowerInvariant(previousChar) == char.ToLowerInvariant(currentChar))
                    {
                        string str = string.Empty;
                        str += previousChar;
                        str += currentChar;
                        IncStatistic(str, listStats, false);
                        previousChar = char.MinValue;
                    }
                    else
                    {
                        previousChar = currentChar;
                    }
                }
            }

            return(listStats);
        }
Esempio n. 3
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();
            List <LetterStats> stats = new List <LetterStats>();

            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                if (char.IsLetter(c))
                {
                    string letter = c.ToString();
                    var    index  = stats.FindIndex(x => string.Compare(x.Letter, letter) == 0);
                    if (index == -1)
                    {
                        var stat = new LetterStats
                        {
                            Letter = letter,
                            Count  = 1
                        };
                        stats.Add(stat);
                    }
                    else
                    {
                        var stat = stats[index];
                        IncStatistic(ref stat);
                        stats[index] = stat;
                    }
                }
            }

            return(stats);
        }
Esempio n. 4
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            IList <LetterStats> result = new List <LetterStats>();

            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char charCurrent = stream.ReadNextChar();

                //если символ не является буквой перейти к следующему
                if (!char.IsLetter(charCurrent))
                {
                    continue;
                }

                // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - регистрозависимый.
                LetterStats row = result.SingleOrDefault(item => item.Letter == charCurrent.ToString());

                if (row != null)
                {
                    IncStatistic(row);
                }
                else
                {
                    result.Add(new LetterStats {
                        Letter = charCurrent.ToString(), Count = 1
                    });
                }
            }

            return(result);
        }
Esempio n. 5
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            using (stream)
            {
                stream.ResetPositionToStart();

                List <LetterStats> result = new List <LetterStats>();

                while (!stream.IsEof)
                {
                    char c = stream.ReadNextChar();

                    // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - регистрозависимый.
                    LetterStats stat = result.Find(x => x.Letter == c.ToString());

                    if (stat == null)
                    {
                        stat = new LetterStats(c.ToString());
                        result.Add(stat);
                    }

                    IncStatistic(stat);
                }

                return(result);
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();
            IList <LetterStats> answer = new List <LetterStats>();

            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                if (!char.IsLetter(c))
                {
                    continue;
                }
                int i;
                for (i = 0; i < answer.Count; i++)
                {
                    if (answer[i].Letter[0] == c)
                    {
                        answer[i] = IncStatistic(answer[i]);
                        break;
                    }
                }

                if (i == answer.Count)
                {
                    var newStruct = new LetterStats();
                    newStruct.Letter = c.ToString();
                    newStruct.Count  = 1;
                    answer.Add(newStruct);
                }
            }

            return(answer);
        }
Esempio n. 7
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        //private static IList<LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        private static void FillDoubleLetterStats(IReadOnlyStream stream, AlphabetLetter alphabetDoubleLetter)
        {
            char c1 = '0', c2;

            stream.ResetPositionToStart();
            if (!stream.IsEof)
            {
                c1 = Char.ToLower(stream.ReadNextChar());
            }

            while (!stream.IsEof)
            {
                c2 = Char.ToLower(stream.ReadNextChar());
                // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - НЕ регистрозависимый.
                for (int i = 0; i < alphabetDoubleLetter.alphabet.Length; i++)
                {
                    if (c1 == alphabetDoubleLetter.alphabet[i] && c2 == alphabetDoubleLetter.alphabet[i])
                    {
                        alphabetDoubleLetter.letterCounter[i]++;
                        break;
                    }
                }
                c1 = c2;
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();

            List <LetterStats> letterStatsList = new List <LetterStats>();

            while (!stream.IsEof)
            {
                try
                {
                    char c = stream.ReadNextChar();

                    // Проверяем, что символ является буквой, иначе продолжаем проход по циклу
                    if (!Char.IsLetter(c))
                    {
                        continue;
                    }

                    AddCharInListWithCheck(letterStatsList, c.ToString());
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            return(letterStatsList);
        }
Esempio n. 9
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> dictionary = new List <LetterStats>();

            stream.ResetPositionToStart();

            while (!stream.IsEof)
            {
                try
                {
                    char c = stream.ReadNextChar();
                    // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - регистрозависимый.
                    if (char.IsLetter(c))
                    {
                        var entry = dictionary.Where(e => e.Letter.Equals(c.ToString(),
                                                                          StringComparison.InvariantCulture)).SingleOrDefault();
                        if (entry == null)                                 //Если не нашли - добавим
                        {
                            dictionary.Add(new LetterStats(c.ToString())); // Т.к. регистрозависимая статистика - добавляем ключи как есть.
                        }
                        else
                        {
                            IncStatistic(entry);
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }
            }
            return(dictionary);
        }
Esempio n. 10
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            var dict = new Dictionary <char, LetterStats>();

            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                if (stream.IsEof)
                {
                    continue;
                }

                if (IsRussianLetter(c))
                {
                    if (dict.ContainsKey(c))
                    {
                        var item = dict[c];
                        item.Count++;
                        dict[c] = item;
                    }
                    else
                    {
                        var newItem = new LetterStats {
                            Count = 1, Letter = c.ToString()
                        };
                        dict.Add(c, newItem);
                    }
                }
            }

            return(dict.Values.ToList());
        }
Esempio n. 11
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();
            var stats = new List <LetterStats>();

            if (stream.IsEof)
            {
                return(stats);
            }
            var chars = new char[2];

            chars[0] = stream.ReadNextChar();

            while (!stream.IsEof)
            {
                chars[1] = stream.ReadNextChar();
                if (char.IsLetter(chars[0]) && char.IsLetter(chars[1]))
                {
                    var str = new string(chars).ToLower();
                    IncStatistic(stats, str);
                }
                chars[0] = chars[1];
            }

            return(stats);
        }
Esempio n. 12
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> rez = new List <LetterStats>();

            stream.ResetPositionToStart();
            char old = '\0';

            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();

                if (c.ToString().ToLower() == old.ToString().ToLower())
                {
                    var ls = new LetterStats()
                    {
                        Count  = 1,
                        Letter = old.ToString().ToLower() + c.ToString().ToLower(),
                    };
                    var item = rez.Find(x => x.Letter == ls.Letter);
                    if (item == null)
                    {
                        rez.Add(ls);
                    }
                    else
                    {
                        IncStatistic(item);
                    }
                }
                old = c;
            }
            return(rez);
        }
Esempio n. 13
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> list = new List <LetterStats>();

            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                if (char.IsLetter(c))
                {
                    int index = list.FindIndex(x => x.Letter == c.ToString());
                    if (index == -1)
                    {
                        list.Add(new LetterStats {
                            Letter = c.ToString(), Count = 1
                        });
                    }
                    else
                    {
                        LetterStats stats = list[index];

                        // заполнять статистику с использованием метода IncStatistic. Учёт букв - регистрозависимый.
                        IncStatistic(ref stats);
                        list[index] = stats;
                    }
                }
            }
            return(list);
        }
Esempio n. 14
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            var statsList = new List <LetterStats>();

            stream.ResetPositionToStart();

            string prev = stream.ReadNextChar().ToString().ToLower();

            while (!stream.IsEof)
            {
                string next = stream.ReadNextChar().ToString().ToLower();

                // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - НЕ регистрозависимый.

                if (prev != next)
                {
                    prev = next;
                    continue;
                }

                string pair = string.Concat(next, prev);

                if (!statsList.Exists(item => item.Letter == pair))
                {
                    var stats = new LetterStats(pair);
                    statsList.Add(stats);
                }

                IncStatistic(statsList.Find(item => item.Letter == pair));
            }

            return(statsList);
        }
Esempio n. 15
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            IList <LetterStats> letterStateList = new List <LetterStats>();

            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                if (!Char.IsLetter(c))
                {
                    continue;
                }

                string letter = new String(c, 1);
                if (letter == " ")
                {
                    continue;
                }

                var letterState = letterStateList.FirstOrDefault(o => o.Letter == letter);
                if (letterState == null)
                {
                    letterState = new LetterStats(letter);

                    letterStateList.Add(letterState);
                }

                IncStatistic(letterState);
            }

            return(letterStateList);
        }
Esempio n. 16
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();
            List <LetterStats> singleLetters = new List <LetterStats>();

            while (!stream.IsEof)
            {
                char   c     = stream.ReadNextChar();
                string value = c.ToString();
                if (!Char.IsLetter(c)) // если символ не является буквой - идем на следующую итерацию
                {
                    continue;
                }

                var foundIndex = singleLetters.FindIndex(stat => stat.Letter.Equals(value));
                if (foundIndex >= 0)
                {
                    OnFoundIndex(singleLetters, foundIndex);
                }
                else // если в коллекции записи о букве нет - создаем запись, определяя тип звука
                {
                    CharType type = Vowel.Contains(value) ? CharType.Vowel : CharType.Consonants;
                    singleLetters.Add(new LetterStats(type, value, 1));
                }
            }
            return(singleLetters);
        }
Esempio n. 17
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();
            IList <LetterStats> letterStats = new List <LetterStats>();

            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                if (char.IsLetter(c))
                {
                    var ls = new LetterStats {
                        Letter = c.ToString()
                    };
                    if (letterStats.Contains(ls))
                    {
                        IncStatistic(letterStats[letterStats.IndexOf(ls)]);
                    }
                    else
                    {
                        letterStats.Add(new LetterStats {
                            Letter = c.ToString(), Count = 1
                        });
                    }
                }
            }
            return(letterStats);
        }
Esempio n. 18
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();
            Dictionary <char, LetterStats> letterDict = new Dictionary <char, LetterStats>();

            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                if (!IsLetter(c))
                {
                    continue;
                }
                // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - регистрозависимый.
                if (letterDict.TryGetValue(c, out var letter))
                {
                    IncStatistic(letter);
                }
                else
                {
                    letterDict.Add(c, new LetterStats()
                    {
                        Letter = c.ToString(),
                        Count  = 1
                    });
                }
            }

            return(new List <LetterStats>(letterDict.Values));
        }
Esempio n. 19
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> rez = new List <LetterStats>();

            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char c  = stream.ReadNextChar();
                var  ls = new LetterStats()
                {
                    Letter = c.ToString(),
                    Count  = 1
                };
                var item = rez.Find(x => x.Letter == ls.Letter);
                if (item == null)
                {
                    rez.Add(ls);
                }
                else
                {
                    IncStatistic(item);
                }
            }
            return(rez);
        }
Esempio n. 20
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> lst = new List <LetterStats>();
            LetterStats        ls;
            int  index;
            char c1;

            stream.ResetPositionToStart();
            char c = stream.ReadNextChar();

            while (!stream.IsEof)
            {
                if (char.IsLetter(c))
                {
                    c1 = stream.ReadNextChar();
                    if (char.IsLetter(c1))
                    {
                        if (char.ToLower(c) == char.ToLower(c1))
                        {
                            ls    = lst.FirstOrDefault(x => x.Letter == (c.ToString() + c1.ToString()));
                            index = lst.IndexOf(ls);
                            if (ls.Letter == null)
                            {
                                ls.Letter = (c.ToString() + c1.ToString());
                                ls.Count  = 1;
                                lst.Add(ls);
                            }
                            else
                            {
                                lst[index] = IncStatistic(ls);
                            }
                            if (!stream.IsEof)
                            {
                                c = stream.ReadNextChar();
                            }
                        }
                        else
                        {
                            c = c1;
                        }
                    }
                    else
                    {
                        c = c1;
                    }
                }
                else
                {
                    if (!stream.IsEof)
                    {
                        c = stream.ReadNextChar();
                    }
                }
            }
            return(lst);

            //throw new NotImplementedException();
        }
Esempio n. 21
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            //Список букв
            IList <LetterStats> doubleLetters = new List <LetterStats>();

            stream.ResetPositionToStart();

            //Предыдущая буква
            char cBack = stream.ReadNextChar();

            while (!stream.IsEof)
            {
                //Перебор по символам
                char c = stream.ReadNextChar();

                //Буквы в верхнем регистре, предыдущая и текущая буквы
                char upperLetterC     = char.ToUpper(c);
                char upperLetterCBack = char.ToUpper(cBack);

                //Если входит в набор
                if (Regex.IsMatch(cBack.ToString(), "[а-яА-Я]") && Regex.IsMatch(c.ToString(), "[а-яА-Я]"))
                {
                    if (upperLetterCBack == upperLetterC)
                    {
                        int count = 0;
                        //Проходимся по списку, если имеется уже такая буква, то увеличиваем
                        //Если нет, то добавляем в список букву с количеством 1
                        foreach (LetterStats item in doubleLetters)
                        {
                            if (char.ToUpper(item.Letter[0]) == upperLetterCBack)
                            {
                                LetterStats copyLetter = doubleLetters[count];
                                IncStatistic(ref copyLetter);
                                doubleLetters[count] = copyLetter;
                                c = default;
                                break;
                            }
                            count++;
                        }
                        if (c != default)
                        {
                            doubleLetters.Add(new LetterStats()
                            {
                                Letter = upperLetterCBack + upperLetterC.ToString(), Count = 1
                            });
                        }
                    }
                }
                cBack = c;
                // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - НЕ регистрозависимый.
            }
            return(doubleLetters);
            //throw new NotImplementedException();
        }
Esempio n. 22
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> stats = new List <LetterStats>();

            stream.ResetPositionToStart();
            char firstLetter       = '\0';
            bool firstLetterReaded = false;

            while (!stream.IsEof)
            {
                if (!firstLetterReaded)
                {
                    firstLetter = char.ToUpper(stream.ReadNextChar());
                }
                if (stream.IsEof)
                {
                    break;
                }
                char secondLetter = char.ToUpper(stream.ReadNextChar());
                if (char.IsLetter(firstLetter) && char.IsLetter(secondLetter) && firstLetter == secondLetter)
                {
                    firstLetterReaded = false;
                    var pair  = firstLetter.ToString() + secondLetter;
                    var index = stats.FindIndex(x => string.Compare(x.Letter, pair) == 0);
                    if (index == -1)
                    {
                        var stat = new LetterStats
                        {
                            Letter = pair,
                            Count  = 1
                        };
                        stats.Add(stat);
                    }
                    else
                    {
                        var stat = stats[index];
                        IncStatistic(ref stat);
                        stats[index] = stat;
                    }
                }
                else
                {
                    if (char.IsLetter(secondLetter))
                    {
                        firstLetterReaded = true;
                        firstLetter       = secondLetter;
                    }
                }
            }

            return(stats);
        }
Esempio n. 23
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - НЕ регистрозависимый.
            }

            //return ???;

            throw new NotImplementedException();
        }
Esempio n. 24
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static LetterStats FillSingleLetterStats(IReadOnlyStream stream)
        {
            LetterStats letterStats = new LetterStats();

            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                if (char.IsLetter(c))
                {
                    letterStats.AddElement(c.ToString());
                }
            }
            return(letterStats);
        }
Esempio n. 25
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> listStats = new List <LetterStats>();

            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char currentChar = stream.ReadNextChar();
                if (char.IsLetter(currentChar))
                {
                    IncStatistic(currentChar.ToString(), listStats, true);
                }
            }

            return(listStats);
        }
Esempio n. 26
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();
            var stats = new List <LetterStats>();

            while (!stream.IsEof)
            {
                var ch = stream.ReadNextChar();
                if (char.IsLetter(ch))
                {
                    IncStatistic(stats, ch.ToString());
                }
            }

            return(stats);
        }
Esempio n. 27
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> result = new List <LetterStats>();
            var wordReg = new Regex(@"[A-Zа-я]{2}", RegexOptions.IgnoreCase);

            stream.ResetPositionToStart();
            char symbolPrevious = stream.ReadNextChar();

            while (!stream.IsEof)
            {
                char symbol       = stream.ReadNextChar();
                var  doubleLetter = $"{symbolPrevious}{symbol}";
                symbolPrevious = symbol;

                if (!wordReg.IsMatch(doubleLetter))
                {
                    continue;
                }

                for (int ii = 0; ii < result.Count; ii++)
                {
                    if (result[ii].Letter != doubleLetter)
                    {
                        continue;
                    }

                    var tmp = result[ii];
                    IncStatistic(ref tmp);
                    result[ii] = tmp;

                    doubleLetter = string.Empty;
                    break;
                }

                if (string.IsNullOrEmpty(doubleLetter))
                {
                    continue;
                }

                result.Add(new LetterStats()
                {
                    Letter = doubleLetter, Count = 1
                });
            }

            return(result);
        }
Esempio n. 28
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();
            var accumulator            = new List <char>();
            IList <LetterStats> answer = new List <LetterStats>();
            var accPosition            = 0;

            while (!stream.IsEof)
            {
                while (accPosition < 2)
                {
                    accumulator.Add(stream.ReadNextChar());
                    accPosition++;
                }

                var leftChar  = Char.ToLower(accumulator[0]);
                var rightChar = Char.ToLower(accumulator[1]);

                if (leftChar.Equals(rightChar))
                {
                    int i;
                    for (i = 0; i < answer.Count; i++)
                    {
                        if (answer[i].Letter == leftChar.ToString() + rightChar)
                        {
                            answer[i] = IncStatistic(answer[i]);
                            break;
                        }
                    }

                    if (i == answer.Count)
                    {
                        var newStruct = new LetterStats
                        {
                            Letter = leftChar.ToString() + rightChar, Count = 1
                        };
                        answer.Add(newStruct);
                    }
                }

                accumulator.RemoveAt(0);
                accPosition--;
            }

            return(answer);
        }
Esempio n. 29
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// UPD: на эквивалетность символы проверяются по типу "скользящего окна", поэтому комбинацию "АаА"
        /// программа засчитает, причем как две пары: "Аа"А и А"аА".
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            stream.ResetPositionToStart();
            List <LetterStats> doubleLetters = new List <LetterStats>();

            string pattern = @"\w+";
            Regex  rgx     = new Regex(pattern);
            string value   = string.Empty;

            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                value += c;
                if (value.Length < 2) // проверяет только парами
                {
                    continue;
                }
                if (value.Length == 3)
                {
                    value = value.Remove(0, 1);
                }
                if (!rgx.IsMatch(value))
                {
                    continue;
                }
                var a = value[0].ToString();
                var b = value[1].ToString();
                if (!String.Equals(a, b, StringComparison.OrdinalIgnoreCase)) // игнорирует пары неэквивалентных символов (регистр игнорируется)
                {
                    continue;
                }
                var foundIndex = doubleLetters.FindIndex(stat => stat.Letter.Equals(value, StringComparison.OrdinalIgnoreCase));

                if (foundIndex >= 0)
                {
                    OnFoundIndex(doubleLetters, foundIndex);
                }
                else // если в коллекции записи о букве нет - создаем запись, определяя тип звука.
                {
                    CharType type = Vowel.Contains(a) ? CharType.Vowel : CharType.Consonants;
                    doubleLetters.Add(new LetterStats(type, value.ToUpper(), 1)); // Для эстетичности вывода регистр меняется на заглавные
                }
            }
            return(doubleLetters);
        }
Esempio n. 30
0
        /// <summary>
        /// Посимвольно читает поток.
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Список симовлов.</returns>
        private static List <char> GetCyrillicCharsFromStream(IReadOnlyStream stream)
        {
            var buffer = new List <char>();

            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char current = stream.ReadNextChar();

                if (!Regex.IsMatch(current.ToString(), Constants.CyrillicPattern))
                {
                    continue;
                }

                buffer.Add(current);
            }

            return(buffer);
        }