示例#1
0
文件: Olimp.cs 项目: lnl122/Solver2
        // решает один сектор
        // вход - Уровень, структура стыковки
        private void SolveOne(Level lvl, OneOlimp oo)
        {
            List <string>         wrd3 = new List <string>();
            List <string>         wrd2 = new List <string>();
            List <string>         wrd1 = new List <string>();
            List <List <string> > wrds = new List <List <string> >();

            foreach (int i in oo.nums)
            {
                wrds.Add(GetSec(lvl, i));
            }
            if (oo.nums.Count == 4)
            {
                wrd3.AddRange(Get3(oo.num, wrds, oo.nums, 0, 1, 2));
                wrd3.AddRange(Get3(oo.num, wrds, oo.nums, 0, 1, 3));
                wrd3.AddRange(Get3(oo.num, wrds, oo.nums, 0, 2, 3));
                wrd3.AddRange(Get3(oo.num, wrds, oo.nums, 1, 2, 3));
                wrd2.AddRange(Get2(oo.num, wrds, oo.nums, 0, 1));
                wrd2.AddRange(Get2(oo.num, wrds, oo.nums, 0, 2));
                wrd2.AddRange(Get2(oo.num, wrds, oo.nums, 0, 3));
                wrd2.AddRange(Get2(oo.num, wrds, oo.nums, 1, 2));
                wrd2.AddRange(Get2(oo.num, wrds, oo.nums, 1, 3));
                wrd2.AddRange(Get2(oo.num, wrds, oo.nums, 2, 3));
                wrd1.AddRange(Get1(oo.num, wrds, oo.nums, 0));
                wrd1.AddRange(Get1(oo.num, wrds, oo.nums, 1));
                wrd1.AddRange(Get1(oo.num, wrds, oo.nums, 2));
                wrd1.AddRange(Get1(oo.num, wrds, oo.nums, 3));
            }
            if (oo.nums.Count == 3)
            {
                wrd3.AddRange(Get3(oo.num, wrds, oo.nums, 0, 1, 2));
                wrd2.AddRange(Get2(oo.num, wrds, oo.nums, 0, 1));
                wrd2.AddRange(Get2(oo.num, wrds, oo.nums, 0, 2));
                wrd2.AddRange(Get2(oo.num, wrds, oo.nums, 1, 2));
                wrd1.AddRange(Get1(oo.num, wrds, oo.nums, 0));
                wrd1.AddRange(Get1(oo.num, wrds, oo.nums, 1));
                wrd1.AddRange(Get1(oo.num, wrds, oo.nums, 2));
            }
            if (oo.nums.Count == 2)
            {
                wrd2.AddRange(Get2(oo.num, wrds, oo.nums, 0, 1));
                wrd1.AddRange(Get1(oo.num, wrds, oo.nums, 0));
                wrd1.AddRange(Get1(oo.num, wrds, oo.nums, 1));
            }
            if (oo.nums.Count == 1)
            {
                wrd1.AddRange(Get1(oo.num, wrds, oo.nums, 0));
            }
            wrd1 = Words.KillDupesAndRange(wrd1);
            wrd2 = Words.KillDupesAndRange(wrd2);
            wrd3 = Words.KillDupesAndRange(wrd3);
            Answer.Add(OT, 3, wrd3, oo.num);
            Answer.Add(OT, 4, wrd2, oo.num);
            Answer.Add(OT, 5, Associations.GetFirstItems(wrd1, 7), oo.num);
            Answer.Add(OT, 6, wrd1, oo.num);
        }
示例#2
0
文件: Olimp.cs 项目: lnl122/Solver2
        // решение при одной ассоциации
        private List <string> Get1(int num, List <List <string> > wrds, List <int> nums, int v)
        {
            List <string> res = new List <string>();
            string        id  = num.ToString() + "=" + nums[v].ToString();

            if (!sended.Contains(id))
            {
                sended.Add(id);
                res.AddRange(Associations.Get(wrds[v]));
            }
            return(Associations.GetFirstItems(res, 20));
        }
示例#3
0
文件: Olimp.cs 项目: lnl122/Solver2
        // решение при трех ассоциациях
        private List <string> Get3(int num, List <List <string> > wrds, List <int> nums, int v1, int v2, int v3)
        {
            List <string> res = new List <string>();
            string        id  = num.ToString() + "=" + nums[v1].ToString() + "," + nums[v2].ToString() + "," + nums[v3].ToString();

            if (!sended.Contains(id))
            {
                sended.Add(id);
                res.AddRange(Associations.Get3(wrds[v1], wrds[v2], wrds[v3]));
            }
            return(Associations.GetFirstItems(res, 10));
        }