Пример #1
0
 // заглушка для получения списка
 public static void Add(OneTab T, int priority, List <string> WordsList, int i1, int i2 = -1, int i3 = -1)
 {
     foreach (string word in WordsList)
     {
         Add(T, priority, word, i1, i2, i3);
     }
 }
Пример #2
0
        /// <summary>
        /// ищем гибриды по двум спискам слов
        /// </summary>
        /// <param name="OT">таб</param>
        /// <param name="w1">список1</param>
        /// <param name="w2">список2</param>
        /// <param name="i">номер первого слова</param>
        /// <param name="j">номер второго слова</param>
        /// <param name="min">минимальное пересечение, букв</param>
        /// <param name="prior">приоритет</param>
        /// <returns>строка ответов с разделителем \r\n</returns>
        private static string FindGybrids(OneTab OT, List <string> w1, List <string> w2, int i, int j, int min, int prior)
        {
            string r2 = "";

            foreach (string s1 in w1)
            {
                foreach (string s2 in w2)
                {
                    int mi = min;
                    int ma = s1.Length - 1;
                    if (s1.Length > s2.Length)
                    {
                        ma = s2.Length - 1;
                    }
                    if (ma < mi)
                    {
                        continue;
                    }
                    for (int k = mi; k <= ma; k++)
                    {
                        // s1 - первые символы (второе слово), s2 - последние символы (первое слово)
                        if (s1.Substring(0, k) == s2.Substring(s2.Length - k, k))
                        {
                            string ans = s2.Substring(0, s2.Length - k) + s1;
                            Answer.Add(OT, prior, ans, i, j);
                            r2 = r2 + ans + "\r\n";
                        }
                    }
                }
            }
            return(r2);
        }
Пример #3
0
        /// <summary>
        /// решение гапоифики
        /// </summary>
        /// <param name="T">таб</param>
        /// <returns>true</returns>
        public bool Process(OneTab T)
        {
            OT   = T;
            task = OT.tbTextTask.Text;
            string[] ar1    = System.Text.RegularExpressions.Regex.Split(task, "\r\n");
            string   resout = "";

            foreach (string s1 in ar1)
            {
                //resout = resout + s1 + ":\r\n";
                string s = Books.ClearBookName(s1).ToLower();
                if (s != "")
                {
                    for (int i = 0; i < Books.WordsCount; i++)
                    {
                        if (s == Books.gapo[i].ToLower())
                        {
                            Answer.Add(T, 3, Books.dict[i], -1);
                            resout = resout + Books.dict[i] + "\r\n";
                        }
                    }
                }
                resout = resout + "\r\n";
            }

            T.tbSectors.Invoke(new Action(() => { T.btSolve.Enabled = true; }));
            T.tbTextHints.Invoke(new Action(() => { T.tbTextHints.Text = resout; }));
            T.tcTabText.Invoke(new Action(() => { T.tcTabText.SelectTab(1); }));
            return(true);
        }
Пример #4
0
 /// <summary>
 /// разпознать и вбить слова от картинок, создание потока
 /// </summary>
 /// <param name="T">таб</param>
 public Picture(OneTab T)
 {
     if (T.cbImageCuttingMethod.SelectedItem.ToString() == "Указан в ручную, равные доли")
     {
         Log.Write("Pics Начали решать картинки\r\n.\r\n");
         Task <bool> t1 = Task <bool> .Factory.StartNew(() => Process(T));
     }
 }
Пример #5
0
        /// <summary>
        /// читает игру, создает уровни и табы на форме
        /// </summary>
        private void CreateLevelsAndTabs()
        {
            GameSelect G = Program.D.Game;

            for (int i = 1; i <= G.gamelevels; i++)
            {
                Level lvl = new Level(G, i);
                Program.D.Lvl.Add(lvl);
                OneTab OT = new OneTab(Program.D, lvl);
                Program.D.OneTab.Add(OT);
            }

            Event_MainFormChangeSize(null, null);
        }
Пример #6
0
        // режет большие картинки на мелкие, сохраняет, возвращает массив локальных путей
        // вход - список урлов, массив количество строк, массив количеств колонок
        // выход - массив локальных путей
        public static string[] GetSmallImagePathes(OneTab T, List <string> urls, int[] Rows, int[] Cols)
        {
            int SmallImageCount = GetSmallImageCount(urls, Rows, Cols);

            string[]      SmallImagePath = new string[SmallImageCount];
            List <string> tmplist        = new List <string>();

            string basename = Environment.CurrentDirectory + @"\Pics\g" + T.level.G.gameid + "_l" + T.level.number.ToString() + "_p{1}_n{2}.jpg";

            for (int part = 0; part < urls.Count; part++)
            {
                System.Windows.Forms.PictureBox PictBox = new System.Windows.Forms.PictureBox();
                PictBox.Load(urls[part]);
                Bitmap Bmp = new Bitmap(PictBox.Image);

                int total_parts = Rows[part] * Cols[part];
                int w           = Bmp.Width;
                int h           = Bmp.Height;
                int dw          = w / Cols[part] - 2 * image_border_width; // ширина одного блока
                int dh          = h / Rows[part] - 2 * image_border_width;
                int cnt         = 0;
                for (int r = 0; r < Rows[part]; r++)
                {
                    for (int c = 0; c < Cols[part]; c++)
                    {
                        cnt++;
                        int sw = image_border_width + (w * c / Cols[part]);
                        int sh = image_border_width + (h * r / Rows[part]);
                        System.Drawing.Bitmap    nb = new System.Drawing.Bitmap(dw, dh);
                        System.Drawing.Rectangle re = new System.Drawing.Rectangle(sw, sh, dw, dh);
                        nb = Bmp.Clone(re, System.Drawing.Imaging.PixelFormat.Undefined);
                        string fn = basename;
                        fn = fn.Replace("{1}", part.ToString());
                        fn = fn.Replace("{2}", cnt.ToString());
                        nb.Save(fn, System.Drawing.Imaging.ImageFormat.Jpeg);
                        tmplist.Add(fn);
                    }
                }
            }

            SmallImagePath = new string[tmplist.Count];
            for (int i = 0; i < tmplist.Count; i++)
            {
                SmallImagePath[i] = tmplist[i];
            }

            return(SmallImagePath);
        }
Пример #7
0
        // код основной программы
        static void Main(string[] args)
        {
            // инитим лог
            Log.Init();
            Log.Write("________________________________________________________________________________");
            Log.Write("      Старт программы..");
            Log.Write("      Сборка от " + File.GetCreationTime(Process.GetCurrentProcess().MainModule.FileName).ToString());
            Log.Write("      ПК: " + Environment.MachineName);
            Log.Write("      " + System.Environment.OSVersion.VersionString + ", " + Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") + ", ver:" + Environment.Version.ToString() + ", CPU: " + Environment.ProcessorCount.ToString() + ", 64bit:" + Environment.Is64BitOperatingSystem.ToString());

            //создаём сплеш
            spl = new Splash(Properties.Resources.version);

            // выполняем проверки окружения
            if (!Components.Check())
            {
                System.Windows.Forms.MessageBox.Show("Не все необхдимые компоненты установлены на ПК.\r\nПроверьте лог-файл.");
                return;
            }

            // инициализируем наши собственные компоненты
            Components.Init();

            // создаем основную форму
            spl.ChangeProgress(70, "Создаём форму приложения");
            AppForm AF = new AppForm();

            // создаём пользовательский таб
            spl.ChangeProgress(70, "Создаём пользовательский уровень");
            Level userlevel = new Level(D.Game, 0);

            D.Lvl.Add(userlevel);
            OneTab OT = new OneTab(D, userlevel);

            D.OneTab.Add(OT);

            // закрываем сплеш
            spl.ChangeProgress(100, "Готово!");
            System.Windows.Forms.Application.Run(D.F);

            // закругляемся
            Components.Close();
            Log.Write("Выход из программы..");
            Log.Close();
        }
Пример #8
0
        }               // нормализация вида задачи

        /// <summary>
        /// решение расчлененок
        /// </summary>
        /// <param name="T">таб</param>
        /// <returns>true</returns>
        public bool Process(OneTab T)
        {
            OT   = T;
            task = OT.tbTextTask.Text;
            slov = OT.iRaschl;
            string resout = "";
            string norm   = Normalize(task);

            string[] ar1 = norm.Split('#');

            // формируем таски, передаём им управление
            var Tasks2 = new List <Task <List <string> > >();

            foreach (string s1 in ar1)
            {
                if (s1.Trim() == "")
                {
                    continue;
                }
                Tasks2.Add(Task <List <string> > .Factory.StartNew(() => ProcessOne(s1, slov)));
            }

            // дождаться выполнения потоков
            Task.WaitAll(Tasks2.ToArray());

            // собираем результаты
            List <string> SolvedWords = new List <string>();

            foreach (Task <List <string> > t8 in Tasks2)
            {
                List <string> r8 = t8.Result;
                SolvedWords.AddRange(r8);
                SolvedWords.Add("");
            }
            foreach (string s1 in SolvedWords)
            {
                resout = resout + s1 + "\r\n";
            }

            T.tbSectors.Invoke(new Action(() => { T.btSolve.Enabled = true; }));
            T.tbTextHints.Invoke(new Action(() => { T.tbTextHints.Text = resout; }));
            T.tcTabText.Invoke(new Action(() => { T.tcTabText.SelectTab(1); }));
            return(true);
        }
Пример #9
0
        // решение олимпиек
        public bool Process(OneTab T)
        {
            OT = T;
            if (T.iOlimpSize == 0)
            {
                int PicsCount = Image.GetSmallImageCount(T.level.urls, T.iRows, T.iCols);
                CreateLinksTable(PicsCount);
            }
            else
            {
                CreateLinksTable(T.iOlimpSize);
            }
            sended = new List <string>();

            int oldsecbon = T.level.secbon;

            tasks = FindBlanks(T.level);
            foreach (OneOlimp oo in tasks)
            {
                SolveOne(T.level, oo);
            }

            bool isTrue = true;

            while (isTrue == true)
            {
                while (T.level.secbon == oldsecbon)
                {
                    System.Threading.Thread.Sleep(5000);
                }
                oldsecbon = T.level.secbon;
                tasks     = FindBlanks(T.level);
                foreach (OneOlimp oo in tasks)
                {
                    SolveOne(T.level, oo);
                }
            }

            //T.tbSectors.Invoke(new Action(() => { T.btSolve.Enabled = true; }));
            return(true);
        }
Пример #10
0
        /// <summary>
        /// распознание и вбивание картинок
        /// </summary>
        /// <param name="T">таб</param>
        /// <returns>true</returns>
        public bool Process(OneTab T)
        {
            string resout = "";

            // создаем массив путей из больших картинок
            string[] SmallImagePath = Image.GetSmallImagePathes(T, T.level.urls, T.iRows, T.iCols);

            // отрисуем их в ГУИ
            string html = GetPicsHtml(SmallImagePath);

            T.wbPictures.Invoke(new Action(() => { T.wbPictures.DocumentText = html; }));
            T.wbPictures.Invoke(new Action(() => { T.tcTabWeb.SelectedIndex = 1; }));

            // из путей к картинкам делаем коллекции слов
            List <Words> TextsFromPics = Image.GetAllDescriptions(SmallImagePath);

            // пробуем вбить ответы (то есть передать их во вбиватор, включая указание приоритета)
            for (int i = 0; i < TextsFromPics.Count; i++)
            {
                Words W = TextsFromPics[i];
                if (W != null)
                {
                    List <string> ww5   = Words.KillDupesAndRange(W.all_base10, 5);
                    List <string> ww100 = Words.KillDupesAndRange(W.all_base10, 100);
                    Answer.Add(T, 4, ww5, i);
                    foreach (string s1 in ww100)
                    {
                        resout = resout + s1 + " ";
                    }
                }
                resout = resout + "\r\n";
                //*** позже добавить более низкие приоритеты
            }

            T.tbSectors.Invoke(new Action(() => { T.btSolve.Enabled = true; }));
            T.tbTextHints.Invoke(new Action(() => { T.tbTextHints.Text = resout; }));
            T.tcTabText.Invoke(new Action(() => { T.tcTabText.SelectTab(1); }));
            return(true);
        }
Пример #11
0
 // постановка слова в очередь
 // вход - Таб, приоритет, слово, 3 номера картинок
 // выход - нет, слово ставиться в очередь
 public static void Add(OneTab T, int priority, string wrd, int i1, int i2 = -1, int i3 = -1)
 {
     if ((i1 != 0) && (i2 != 0) && (i3 != 0))
     {
         int    lvlnum = T.level.number;
         string wrd2   = SetProtect(wrd, i1, T.sProtect);
         Answ   q1     = new Answ();
         q1.OT       = T;
         q1.Tab      = T.Tab;
         q1.Sec      = T.tbSectors;
         q1.Bon      = T.tbBonuses;
         q1.Web      = T.wbPictures;
         q1.Txt      = T.tbTextHints;
         q1.wrd      = wrd;
         q1.wrd2     = wrd2;
         q1.lvlnum   = T.level.number;
         q1.i1       = i1;
         q1.i2       = i2;
         q1.i3       = i3;
         q1.priority = priority;
         Queue.Add(q1);
     }
 }
Пример #12
0
 /// <summary>
 /// создание потока для гапоифики книг
 /// </summary>
 /// <param name="T">таб</param>
 public GapoifikaBooks(OneTab T)
 {
     Log.Write("gaB Начали решать книжную гапоифику\r\n.\r\n");
     Task <bool> t1 = Task <bool> .Factory.StartNew(() => Process(T));
 }
Пример #13
0
        /// <summary>
        /// распознание и решение гибридов картинок
        /// </summary>
        /// <param name="T">таб</param>
        /// <returns>true</returns>
        public bool Process(OneTab T)
        {
            OT = T;
            string resout = "";

            // создаем массив путей из больших картинок
            string[] SmallImagePath = Image.GetSmallImagePathes(T, T.level.urls, T.iRows, T.iCols);

            // отрисуем их в ГУИ
            string html = Picture.GetPicsHtml(SmallImagePath);

            T.wbPictures.Invoke(new Action(() => { T.wbPictures.DocumentText = html; }));

            // из путей к картинкам делаем коллекции слов
            List <Words> TextsFromPics = Image.GetAllDescriptions(SmallImagePath);

            // решаем, собственно
            int min = T.iGybridMin;
            int cnt = TextsFromPics.Count;

            for (int i = 0; i < cnt; i++)
            {
                for (int j = 0; j < cnt; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }
                    // надо сравнить наборы слов для i и j
                    Words w1 = TextsFromPics[i];
                    Words w2 = TextsFromPics[j];

                    // приоритет 3 - для гибридов по базовым словам
                    // приоритет 4 - для остальных
                    // приоритет 5 - для ассоциаций ко всему найденному
                    if ((w1 != null) && (w2 != null))
                    {
                        if ((w1.all_base != null) && (w2.all_base != null))
                        {
                            List <string> wru1 = Words.KillDupesAndRange(w1.ru, 10);
                            List <string> wru2 = Words.KillDupesAndRange(w2.ru, 10);
                            wru1.AddRange(w1.all_base);
                            wru2.AddRange(w2.all_base);
                            string resout2 = FindGybrids(T, wru1, wru2, i, j, min, 3);
                            resout = resout + resout2 + "\r\n";

                            /*
                             * List<string> ls1 = new List<string>();
                             * List<string> ls2 = new List<string>();
                             * ls1.AddRange(w1.all_base); ls1.AddRange(w1.all_assoc25);
                             * ls2.AddRange(w2.all_base); ls2.AddRange(w2.all_assoc25);
                             * //ls1.AddRange(w1.all_base); ls1.AddRange(w1.all_assoc25); ls1.AddRange(w1.ru_check); ls1.AddRange(w1.en_trans); ls1.AddRange(w1.f_b_noun); ls1.AddRange(w1.f_b_adjective);
                             * //ls2.AddRange(w2.all_base); ls2.AddRange(w2.all_assoc25); ls2.AddRange(w2.ru_check); ls2.AddRange(w2.en_trans); ls2.AddRange(w2.f_b_noun); ls2.AddRange(w2.f_b_adjective);
                             * ls1 = Words.KillDupesAndRange(ls1);
                             * ls2 = Words.KillDupesAndRange(ls2);
                             * FindGybrids(T, ls1, ls2, i, j, min, 4);
                             *
                             * иначе получаем чрезмерно много вариантов
                             */
                        }
                    }
                    //List<string> ass1 = Words.KillDupesAndRange(Associations.Get(ls1));
                    //List<string> ass2 = Words.KillDupesAndRange(Associations.Get(ls2));
                    //FindGybrids(T, ass1, ass2, i, j, min, 5);
                    //иначе получаем чрезмерно много вариантов
                }
            }

            T.tbSectors.Invoke(new Action(() => { T.btSolve.Enabled = true; }));
            T.tbTextHints.Invoke(new Action(() => { T.tbTextHints.Text = resout; }));
            T.tcTabText.Invoke(new Action(() => { T.tcTabText.SelectTab(1); }));

            return(true);
        }
Пример #14
0
 // создание потока для ассоциатора олимпиек
 public Olimp(OneTab T)
 {
     Log.Write("Oli Начали решать олимпийки\r\n.\r\n");
     Task <bool> t1 = Task <bool> .Factory.StartNew(() => Process(T));
 }
Пример #15
0
 /// <summary>
 /// создание потока для ледиды книг
 /// </summary>
 /// <param name="T">таб</param>
 public LedidaBooks(OneTab T)
 {
     Log.Write("leB Начали решать книжную ледиду\r\n.\r\n");
     Task <bool> t1 = Task <bool> .Factory.StartNew(() => Process(T));
 }
Пример #16
0
 /// <summary>
 /// создание потока для расчлененок
 /// </summary>
 /// <param name="T">таб</param>
 public Raschl(OneTab T)
 {
     Log.Write("Rasch Начали решать расчленки\r\n.\r\n");
     Task <bool> t1 = Task <bool> .Factory.StartNew(() => Process(T));
 }
Пример #17
0
 /// <summary>
 /// создание потока для гапоифики фильмов
 /// </summary>
 /// <param name="T">таб</param>
 public GapoifikaFilms(OneTab T)
 {
     Log.Write("gaF Начали решать гапоифику по фильмам\r\n.\r\n");
     Task <bool> t1 = Task <bool> .Factory.StartNew(() => Process(T));
 }
Пример #18
0
        /// <summary>
        /// решение гапоифики
        /// </summary>
        /// <param name="T">таб</param>
        /// <returns>true</returns>
        public bool Process(OneTab T)
        {
            OT   = T;
            task = OT.tbTextTask.Text;
            string resout = "";

            string[] ar1 = System.Text.RegularExpressions.Regex.Split(task, "\r\n");
            foreach (string s1 in ar1)
            {
                if (s1 != "")
                {
                    // получим возможные наименвоания фильмов
                    List <string> names = Films.GetNameList(s1);
                    // и маску в формате "га по и фи ка"
                    string mask = Films.PrepareSearchString(s1);
                    mask = mask.ToLower().Replace("  ", " ").Replace("  ", " ").Trim();

                    foreach (string name in names)
                    {
                        // уберем цифры в скобках
                        string n = RemoveYearBrackets(name);
                        n = RemoveYearBrackets(n);
                        // уберем спецсимволы
                        n = n.Replace("`", " ").Replace("~", " ").Replace("!", " ").Replace("@", " ").Replace("#", " ").Replace("№", " ").Replace("\"", " ");
                        n = n.Replace(";", " ").Replace("$", " ").Replace("%", " ").Replace("^", " ").Replace(":", " ").Replace("&", " ").Replace("?", " ");
                        n = n.Replace("*", " ").Replace("(", " ").Replace(")", " ").Replace("-", " ").Replace("_", " ").Replace("=", " ").Replace("+", " ");
                        n = n.Replace("{", " ").Replace("}", " ").Replace("[", " ").Replace("]", " ").Replace("/", " ").Replace("|", " ").Replace("\\", " ");
                        n = n.Replace(";", " ").Replace(":", " ").Replace("'", " ").Replace(",", " ").Replace(".", " ").Replace("<", " ").Replace(">", " ");
                        n = n.Replace("«", " ").Replace("»", " ");
                        n = n.Replace("…", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Trim();
                        // составим из очередного найденного названия маску в стиле "га по и фи ка"
                        string[] ar2 = n.Split(' ');
                        string   nn  = "";
                        foreach (string s in ar2)
                        {
                            if (s == "")
                            {
                                continue;
                            }
                            if (s.Length == 1)
                            {
                                nn = nn + s + " ";
                            }
                            else
                            {
                                nn = nn + s.Substring(0, 2) + " ";
                            }
                        }
                        nn = nn.ToLower().Replace("  ", " ").Replace("  ", " ").Trim();
                        // проверяем, если соответствует - передаем во вбиватор
                        if (nn == mask)
                        {
                            Answer.Add(T, 3, n, -1);
                            resout = resout + n + "\r\n";
                        }
                    }
                }
                resout = resout + "\r\n";
            }

            T.tbSectors.Invoke(new Action(() => { T.btSolve.Enabled = true; }));
            T.tbTextHints.Invoke(new Action(() => { T.tbTextHints.Text = resout; }));
            T.tcTabText.Invoke(new Action(() => { T.tcTabText.SelectTab(1); }));
            return(true);
        }