// решает один сектор // вход - Уровень, структура стыковки 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); }
// решение при одной ассоциации 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)); }
// решение при трех ассоциациях 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)); }