Exemplo n.º 1
0
        /// <summary>
        /// 過濾數字
        /// </summary>
        public List <BaseOptions> Filter(List <BaseOptions> tmp)
        {
            string condition = "";

            //大底
            #region 大底 / 複式
            //複式
            if ((bool)cbCheck3.IsChecked)
            {
                condition = teCheckHundred3.Text + "/" + teCheckTen3.Text + "/" + teCheckUnit3.Text;
                tmp       = Calculation.CompoundNumber(tmp, condition, '/', 3, true);
            }

            //大底
            if ((bool)cbCheck4.IsChecked && !(bool)cbIsGroup.IsChecked)
            {
                tmp = Calculation.AssignNumber(tmp, teBottom.Text, true);
            }
            #endregion

            //公式
            //其他

            #region group1-殺直選.垃圾複式.殺2碼.定位殺2碼.必出2碼.交集.公式.其他
            //殺直選
            tmp = Calculation.AssignNumber(tmp, teEditor1.Text, false);

            //垃圾複式
            tmp = Calculation.GarbageNumber(tmp, teEditor2.Text, 2, '*', 3);

            //殺兩碼
            condition = Calculation.ConbinationString(teEditor3.Text, 2);
            tmp       = Calculation.ExistsNumber(tmp, condition, 2, true, false);


            //定位殺兩碼
            tmp = Calculation.PosNumber(tmp, teEditor4.Text, 2, false);

            //必出兩碼
            tmp = Calculation.ExistsNumber(tmp, teEditor5.Text, 2, true, true);

            //交集
            if (!string.IsNullOrEmpty(teEditor6.Text))
            {
                var inter = Regex.Replace(Regex.Replace(teEditor6.Text, "\n", " "), "[^0-9|\\s]", "").Split(' ').Except(new string[1] {
                    ""
                }).Where(x => x.Length == 3);
                if (inter.Count() > 0)
                {
                    tmp = tmp.Where(x => inter.Contains(x.Code)).ToList();
                }
            }
            //公式

            //其他
            #endregion

            #region group2-和 跨 膽
            //殺和尾
            tmp = Calculation.SumLastNumber(tmp, cblType1, false);

            //殺跨度
            tmp = Calculation.CrossNumber(tmp, cblType2, false);

            //選膽
            condition = Calculation.BeforeCheck(tmp, cblType3);
            condition = condition.Replace(",", " ");
            var conArray = condition.Split(' ').Except(new string[1] {
                ""
            });
            int unit = (int)rblSelect.SelectedValue;
            if (unit >= 2 && conArray.Count() >= unit)
            {
                Calculation.test tmps = Calculation.CombinationNNumber("", condition.Split(' ').ToArray(), unit, new Calculation.test());
                condition = string.Join(" ", tmps.result2.Split(' ').Where(x => x.Distinct().Count() == unit));
            }
            tmp = Calculation.ExistsNumber(tmp, condition, (int)rblSelect.SelectedValue, true, true);
            #endregion

            #region group3-和值
            if ((bool)cbRemoveSum.IsChecked)
            {
                //殺指定和值
                tmp = Calculation.SumNumber(tmp, teSum.Text, false);

                //和值範圍
                int rangeStart = 0;
                int rangeEnd   = 0;
                int.TryParse(teRange1.Text, out rangeStart);
                int.TryParse(teRange2.Text, out rangeEnd);
                var range = Calculation.CreateContinueNumber(rangeStart, rangeEnd);
                tmp = Calculation.SumNumber(tmp, string.Join(" ", range.Select(x => x.Code)), true);
            }
            #endregion

            #region group4-排除複式/定位殺
            //排除複式
            if ((bool)cbCheck1.IsChecked)
            {
                condition = teCheckHundred.Text + "/" + teCheckTen.Text + "/" + teCheckUnit.Text;
                tmp       = Calculation.CompoundNumber(tmp, condition, '/', 3);
            }

            //定位殺
            if ((bool)cbCheck2.IsChecked)
            {
                tmp = Calculation.PosNumber(tmp, teCheckHundred2.Text, "0", false);
                tmp = Calculation.PosNumber(tmp, teCheckTen2.Text, "1", false);
                tmp = Calculation.PosNumber(tmp, teCheckUnit2.Text, "2", false);
            }

            //AC值
            #endregion

            #region group5-大小
            tmp = Calculation.CheckValueNumber(tmp, cblData1, 1, true);
            #endregion

            #region group6-奇偶
            tmp = Calculation.OddEvenNumber(tmp, cblData2, true);
            #endregion

            #region group7-質合
            tmp = Calculation.PrimeNumber(tmp, cblData3, true);
            #endregion

            #region group8-012路特別排除
            tmp = Calculation.DivThreeRemainder(tmp, cbl012, false);
            #endregion

            #region group9-匹配過濾
            if ((bool)cbMatch.IsChecked)
            {
                tmp = Calculation.ThreeStartMatchFilter(tmp, dgData1.ItemsSource.Cast <WpfApp.Custom.Match>().ToList());
            }
            #endregion

            #region group10-位置大小匹配
            if ((bool)cbPosMatch.IsChecked)
            {
                tmp = Calculation.ThreeStartMatch(tmp, dgData2.ItemsSource.Cast <WpfApp.Custom.Match>().ToList());
            }
            #endregion

            #region group11-特別排除
            tmp = Calculation.ThreeSpecialData(tmp, cblSpecialExcept.SelectedValue);
            #endregion

            return(tmp);
        }