Пример #1
0
        private static List <Regulations> ConvertStringToRegulations(string str)
        {
            List <Regulations> list = new List <Regulations>();

            while (str.Length > 1)
            {
                Regulations regulations = new Regulations();
                regulations.right = new List <List <string> >();
                var index = str.IndexOf("-");
                regulations.left = str.Substring(0, index);

                str   = str.Substring(index + 2);
                index = str.IndexOf("\n");
                if (index < 0)
                {
                    var tmp1 = ConvertStringToStringList(str.Substring(0), "|");
                    foreach (var tmp in tmp1)
                    {
                        regulations.right.Add(ConvertStringToStringList(tmp));
                    }
                    list.Add(regulations);
                    break;
                }

                var tmp2 = ConvertStringToStringList(str.Substring(0, index), "|");
                foreach (var tmp in tmp2)
                {
                    regulations.right.Add(ConvertStringToStringList(tmp));
                }
                str = str.Substring(index + 1);
                list.Add(regulations);
            }

            return(list);
        }
Пример #2
0
        // Зайти в функцию с левым значением
        // Проверить насколько велико уже слово
        // пока что не слова, как проверять?
        // Запоминать длину слова

        static List <string> CompRec(string S, int stringCount)
        {
            if (stringCount >= mMax)
            {
                return(null);
            }

            List <string> list_result = new List <string>();
            Regulations   regular     = new Regulations();
            var           tmp         = mRegulations.Find(t => t.left == S);

            regular = tmp;

            if (regular.right == null)
            {
                list_result.Add(S);
                stringCount += S.Length;
                return(list_result);
            }
            foreach (var regIter in regular.right)
            {
                foreach (var element in regIter)
                {
                    if (mRegulations.FindIndex(t => t.left == element) > -1)
                    {
                        S = element;
                        var sub_list = CompRec(S, stringCount + list_result.Last().Length);
                        if (sub_list == null)
                        {
                            continue;
                        }
                        var tmpList = new List <string>();


                        if (list_result.Count == 0)
                        {
                            foreach (var iter in sub_list)
                            {
                                tmpList.Add(iter);
                            }
                        }
                        else
                        {
                            foreach (var iter in sub_list)
                            {
                                tmpList.Add(list_result.Last() + iter);
                            }
                            list_result.Remove(list_result.Last());
                        }

                        foreach (var iter in tmpList)
                        {
                            list_result.Add(iter);
                        }
                        //} else if (element.Equals(lamb)) {
                        //    Console.WriteLine("Попал на лямбду");
                    }
                    else
                    {
                        list_result.Add(element);
                    }
                }
            }

            for (int i = 0; i < list_result.Count; i++)
            {
                if (list_result[i].Length > mMax)
                {
                    list_result.Remove(list_result[i]);
                    i--;
                }
            }

            return(list_result);
        }