/// <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);
        }
Exemple #2
0
        /// <summary>
        /// 過濾數字
        /// </summary>
        public List <BaseOptions> Filter(List <BaseOptions> tmp)
        {
            //殺直選
            tmp = Calculation.AssignNumber(tmp, tePos.Text, false);

            //定位殺
            tmp = Calculation.PosNumber(tmp, cblTenThousands, "0", false);
            tmp = Calculation.PosNumber(tmp, cblThousands, "1", false);
            tmp = Calculation.PosNumber(tmp, cblHundreds, "2", false);
            tmp = Calculation.PosNumber(tmp, cblTens, "3", false);
            tmp = Calculation.PosNumber(tmp, cblUnits, "4", false);

            //殺和尾
            tmp = Calculation.SumLastNumber(tmp, cblSumLast, false);

            //殺和值
            tmp = Calculation.SumNumber(tmp, teSum.Text, false);

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

            //殺通碼
            tmp = Calculation.ExistsNumber(tmp, cblComm, 1, false, false);

            //殺大小
            tmp = Calculation.CheckValueNumber(tmp, cblData1, 1, false);

            //殺奇偶
            tmp = Calculation.OddEvenNumber(tmp, cblData2, false);

            //殺质合
            tmp = Calculation.PrimeNumber(tmp, cblData3, false);

            //膽碼
            if (cblNumber1.SelectedValue.IndexOf('1') > -1)
            {
                tmp = Calculation.ExistsNumber2(tmp, cblNumber1, cblNumber1_2, null, (bool)btnCountRepeat.IsChecked);
            }
            if (cblNumber2.SelectedValue.IndexOf('1') > -1)
            {
                tmp = Calculation.ExistsNumber2(tmp, cblNumber2, cblNumber2_2, null, (bool)btnCountRepeat.IsChecked);
            }
            if (cblNumber3.SelectedValue.IndexOf('1') > -1)
            {
                tmp = Calculation.ExistsNumber2(tmp, cblNumber3, cblNumber3_2, null, (bool)btnCountRepeat.IsChecked);
            }
            if (cblNumber4.SelectedValue.IndexOf('1') > -1)
            {
                tmp = Calculation.ExistsNumber2(tmp, cblNumber4, cblNumber4_2, null, (bool)btnCountRepeat.IsChecked);
            }
            if (cblNumber5.SelectedValue.IndexOf('1') > -1)
            {
                tmp = Calculation.ExistsNumber2(tmp, cblNumber5, cblNumber5_2, null, (bool)btnCountRepeat.IsChecked);
            }
            if (cblNumber6.SelectedValue.IndexOf('1') > -1)
            {
                tmp = Calculation.ExistsNumber2(tmp, cblNumber6, cblNumber6_2, null, (bool)btnCountRepeat.IsChecked);
            }

            //比例大小比
            tmp = Calculation.BigSmallRatio(tmp, cblRatio.SelectedValue);

            //比例奇偶比
            tmp = Calculation.OddEvenRatio(tmp, cblRatio2.SelectedValue);

            //比例質合比
            tmp = Calculation.PrimeRatio(tmp, cblRatio3.SelectedValue);
            return(tmp);
        }
        ///// <summary>
        ///// 選取全部選項
        ///// </summary>
        //public void SelectAll()
        //{
        //    IsSetting = true;

        //    IsSetting = false;
        //}

        /// <summary>
        /// 過濾數字
        /// </summary>
        public List <BaseOptions> Filter(List <BaseOptions> tmp)
        {
            string[] empty = new string[1] {
                ""
            };

            //大底先篩再過濾
            var n = teNumber.Text.Split(' ').Except(empty);

            if (n.Count() > 0)
            {
                tmp = tmp.Where(x => n.Contains(x.Code)).ToList();
            }

            #region group1-殺直選.殺垃圾.殺兩碼.必出兩碼.殺三碼.必出三碼.定位杀号
            //殺直選
            tmp = Calculation.AssignNumber(tmp, teEditor1.Text, false);

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

            //殺兩碼
            tmp = Calculation.ExistsNumber(tmp, teEditor3_1.Text, 2, (!(bool)cbIgnore1_1.IsChecked), false);

            //必出兩碼
            tmp = Calculation.ExistsNumber(tmp, teEditor3_2.Text, 2, (!(bool)cbIgnore1_2.IsChecked), true);

            //殺三碼
            tmp = Calculation.ExistsNumber(tmp, teEditor4_1.Text, 3, (!(bool)cbIgnore2_1.IsChecked), false);

            //必出三碼
            tmp = Calculation.ExistsNumber(tmp, teEditor4_2.Text, 3, (!(bool)cbIgnore2_2.IsChecked), true);

            //定位杀号
            tmp = Calculation.PosNumber(tmp, teEditor5.Text, -1, false);
            #endregion

            #region group2-定位殺
            tmp = Calculation.PosNumber(tmp, cblThousands, "0", false);
            tmp = Calculation.PosNumber(tmp, cblHundreds, "1", false);
            tmp = Calculation.PosNumber(tmp, cblTens, "2", false);
            tmp = Calculation.PosNumber(tmp, cblUnits, "3", false);
            #endregion

            #region group3-殺和尾.殺和值.殺跨度.殺通碼.殺AC值
            //殺和尾
            tmp = Calculation.SumLastNumber(tmp, cblType1, false);

            //殺和值
            tmp = Calculation.SumNumber(tmp, teSum.Text, false);

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

            //殺通碼
            tmp = Calculation.ExistsNumber(tmp, cblType3, 1, false, false);

            //殺AC值=>目前不需

            #endregion

            #region group4-膽碼
            if (cblNumber1.SelectedValue.IndexOf('1') > -1)
            {
                tmp = Calculation.ExistsNumber2(tmp, cblNumber1, cblNumber1_2, null, (bool)btnCountRepeat.IsChecked);
            }
            if (cblNumber2.SelectedValue.IndexOf('1') > -1)
            {
                tmp = Calculation.ExistsNumber2(tmp, cblNumber2, cblNumber2_2, null, (bool)btnCountRepeat.IsChecked);
            }
            if (cblNumber3.SelectedValue.IndexOf('1') > -1)
            {
                tmp = Calculation.ExistsNumber2(tmp, cblNumber3, cblNumber3_2, null, (bool)btnCountRepeat.IsChecked);
            }
            if (cblNumber4.SelectedValue.IndexOf('1') > -1)
            {
                tmp = Calculation.ExistsNumber2(tmp, cblNumber4, cblNumber4_2, null, (bool)btnCountRepeat.IsChecked);
            }
            #endregion

            #region group5-殺特殊型態
            tmp = Calculation.FourSpecialData(tmp, cblSpecial.SelectedValue);
            #endregion

            #region group6-特别排除
            tmp = Calculation.FourSpecial2Data(tmp, cblSpecialExcept.SelectedValue);
            #endregion

            #region group7-殺大小
            tmp = Calculation.CheckValueNumber(tmp, cblData1, 1, false);
            #endregion

            #region group8-殺奇偶
            tmp = Calculation.OddEvenNumber(tmp, cblData2, false);
            #endregion

            #region group9-殺质合
            tmp = Calculation.PrimeNumber(tmp, cblData3, false);
            #endregion

            #region group10-殺012路
            tmp = Calculation.DivThreeRemainder(tmp, cbl012, false);
            #endregion

            return(tmp);
        }