Exemple #1
0
        public IFilter <TState, TEntity> Custom <TFilter>() where TFilter : class, IFilterNode, new()
        {
            var filter = new TFilter();

            this.tempNodesCustom.Add(filter);
            return(this);
        }
Exemple #2
0
        private int WinnerWrite(LottoLionContext ltctx, TFilter filter)
        {
            var _result = 0;

            foreach (var _d in filter.elects)
            {
                var _select = new TbLionSelect()
                {
                    SequenceNo = filter.sequence_no,
                    SelectNo   = _d.select_no,

                    Digit1 = _d.digits[0],
                    Digit2 = _d.digits[1],
                    Digit3 = _d.digits[2],
                    Digit4 = _d.digits[3],
                    Digit5 = _d.digits[4],
                    Digit6 = _d.digits[5],

                    IsLeft = _d.is_left
                };

                ltctx.TbLionSelect.Add(_select);

                _result++;
            }

            return(_result);
        }
        public void Bind <TFilter>()
            where TFilter : ICommandMessageFilter, new()
        {
            var filter = new TFilter();

            _filters.Add(filter);
        }
        public FirebusClientOptionsBuilder AddRegisterJobFilter <TFilter>() where TFilter : IRegisterJobFilter, new()
        {
            var filterInstance = new TFilter();

            Options.BeforeRegisterJobFilters.Add(filterInstance);
            Options.AfterRegisterJobFilters.Add(filterInstance);
            return(this);
        }
        public FirebusServerOptionsBuilder AddExecuteJobFilter <TFilter>() where TFilter : IExecuteJobFilter, new()
        {
            var filterInstance = new TFilter();

            Options.BeforeExecuteJobFilters.Add(filterInstance);
            Options.AfterExecuteJobFilters.Add(filterInstance);
            return(this);
        }
Exemple #6
0
        private void WinnerShuffle(TFilter filter)
        {
            var _random = new Random();

            var _n = filter.elects.Count;

            for (var i = 0; i < _n; i++)
            {
                var _r = i + (int)(_random.NextDouble() * (_n - i));

                var _t = filter.elects[_r];
                filter.elects[_r] = filter.elects[i];
                filter.elects[i]  = _t;
            }
        }
Exemple #7
0
        private (int no_select, int no_combine) WinnerElect(LottoLionContext ltctx, TFilter filter)
        {
            var _result = (no_select : 0, no_combine : 0);

            // 완전 조합으로 번호를 생성 후 filtering 하여 확률적으로 당첨이 낮은 set을 제외 시킵니다.
            var _combinations = GetCombinations(filter.sampling_digits, 6);

            foreach (var _numbers in _combinations)
            {
                _result.no_combine++;

                if (Filtering(filter, _numbers) == false)
                {
                    continue;
                }

                _result.no_select++;

                var _tdigits = new TDigits()
                {
                    select_no = _result.no_select + filter.start_select_no,
                    digits    = _numbers.OrderBy(n => n).ToArray(),
                    is_used   = false,
                    is_left   = filter.is_left_selection
                };

                filter.elects.Add(_tdigits);
            }

            var _digits_compare = new TDigitsComparer();

            {
                filter.elects = filter.elects
                                .Distinct(_digits_compare)
                                .ToList();
            }

            return(_result);
        }
Exemple #8
0
        /// <summary>
        /// 번호를 추출 합니다. 숫자 선택 후 제외 시키는 방법으로 처리 하게 됩니다.
        /// </summary>
        /// <param name="ltctx"></param>
        /// <param name="factor"></param>
        /// <returns></returns>
        public int WinnerSelect(LottoLionContext ltctx, TbLionFactor factor)
        {
            var _analysies = ltctx.TbLionAnalysis
                             .Where(x => x.SequenceNo < factor.SequenceNo)
                             .OrderBy(x => x.SequenceNo)
                             .ToArray();

            var _sum_odd_even = EvenOddBalance(_analysies, factor.SequenceNo);
            var _sum_high_low = HighLowBalance(_analysies, factor.SequenceNo);

            var _sum_balances = _analysies
                                .GroupBy(x => x.SumFrequence)
                                .Select(
                y => new TKeyValue
            {
                key   = y.Key,
                value = y.Count()
            }
                )
                                .ToList();

            var _filter = new TFilter()
            {
                sequence_no = factor.SequenceNo,

                is_left_selection = false,
                start_select_no   = 0,

                elects          = new List <TDigits>(),
                sampling_digits = null,

                analysies = _analysies,
                factor    = factor,

                sum_balances = _sum_balances,

                sum_odd  = _sum_odd_even.sum_odd,
                sum_even = _sum_odd_even.sum_even,
                sum_high = _sum_high_low.sum_high,
                sum_low  = _sum_high_low.sum_low
            };

            // 좌측
            {
                var _sampling_numbers = GetLNumbereByPercent(_analysies, factor.SequenceNo, factor.LNoSampling);

                _filter.is_left_selection = true;
                _filter.sampling_digits   = _sampling_numbers;

                var _selection = WinnerElect(ltctx, _filter);
                {
                    _filter.start_select_no += _selection.no_select;

                    factor.LNoCombination = _selection.no_combine;
                    factor.LNoExtraction  = _selection.no_select;
                }
            }

            // 우측
            {
                var _sampling_numbers = GetRNumbereByPercent(_analysies, factor.SequenceNo, factor.RNoSampling);

                _filter.is_left_selection = false;
                _filter.sampling_digits   = _sampling_numbers;

                var _selection = WinnerElect(ltctx, _filter);
                {
                    _filter.start_select_no += _selection.no_select;

                    factor.RNoCombination = _selection.no_combine;
                    factor.RNoExtraction  = _selection.no_select;
                }
            }

            // shuffle
            WinnerShuffle(_filter);

            // write to db
            return(WinnerWrite(ltctx, _filter));
        }
Exemple #9
0
        private bool Filtering(TFilter filter, short[] digits)
        {
            // 홀짝 확인
            var _odd_even = 0;
            {
                for (int i = 0; i < 6; i++)
                {
                    _odd_even += digits[i] % 2;
                }

                // 홀수 갯수가 0,1 또는 5,6 이면 제외
                if (_odd_even <= filter.factor.MinOddEven || _odd_even >= filter.factor.MaxOddEven)
                {
                    return(false);
                }

                //if (filter.factor.OddSelection == true)
                //{
                //    // 홀수: 2, 3, 4만 통과 되므로 최소 12를 초과 해야 함
                //    if (filter.sum_odd > 12)
                //    {
                //        _odd_even += filter.sum_odd;
                //        if (_odd_even < 15)
                //            return false;
                //    }
                //    else
                //    {
                //        if (_odd_even < 3)
                //            return false;
                //    }
                //}
                //else
                //{
                //    // 짝수
                //    if (filter.sum_even > 12)
                //    {
                //        _odd_even += (6 - _odd_even) + filter.sum_even;
                //        if (_odd_even < 15)
                //            return false;
                //    }
                //    else
                //    {
                //        if (_odd_even > 3)
                //            return false;
                //    }
                //}
            }

            // 고저선택
            var _high_low = 0;
            {
                for (int i = 0; i < 6; i++)
                {
                    _high_low += (digits[i] > WinnerAnalysis.MiddleNumber) ? 1 : 0;
                }

                // (45 / 2 + 1) 초과 갯수가 0,1 또는 5,6 이면 제외
                if (_high_low <= filter.factor.MinHighLow || _high_low >= filter.factor.MaxHighLow)
                {
                    return(false);
                }

                //if (filter.factor.HighSelection == true)
                //{
                //    // 고
                //    if (filter.sum_high > 12)
                //    {
                //        _high_low += filter.sum_high;
                //        if (_high_low < 15)
                //            return false;
                //    }
                //    else
                //    {
                //        if (_high_low < 3)
                //            return false;
                //    }
                //}
                //else
                //{
                //    // 저
                //    if (filter.sum_low > 12)
                //    {
                //        _high_low += (6 - _high_low) + filter.sum_low;
                //        if (_high_low < 15)
                //            return false;
                //    }
                //    else
                //    {
                //        if (_high_low > 3)
                //            return false;
                //    }
                //}
            }

            // 합계확인
            var _sum_balance = 0;
            {
                for (int i = 0; i < 6; i++)
                {
                    _sum_balance += digits[i];
                }

                var _sum_exist = filter.sum_balances.Where(x => x.key == _sum_balance).Sum(y => y.value);
                if (_sum_exist <= filter.factor.MaxSumFrequence)
                {
                    return(false);
                }
            }

            // 끝수확인
            var _last_number = 0;
            {
                for (int i = 0; i < 5; i++)
                {
                    var _n = 1;

                    for (int j = i + 1; j < 6; j++)
                    {
                        if (digits[i] % 10 == digits[j] % 10)
                        {
                            _n++;
                        }
                    }

                    if (_n > _last_number)
                    {
                        _last_number = _n;
                    }
                }

                if (_last_number >= filter.factor.MaxLastNumber)
                {
                    return(false);
                }
            }

            // 연변확인
            var _series_number = 0;
            {
                var _series_count = 1;

                var _x = digits[0];
                for (var k = 2; k <= 6; k++)
                {
                    var _y = digits[k - 1];

                    if (_x + 1 == _y)
                    {
                        _series_count++;

                        if (_series_number < _series_count)
                        {
                            _series_number = _series_count;
                        }
                    }
                    else
                    {
                        _series_count = 1;
                    }

                    _x = _y;
                }

                if (_series_number >= filter.factor.MaxSeriesNumber)
                {
                    return(false);
                }
            }

            // 숫자집단
            var _group_balance = 0;
            {
                var _group = new short[5];
                for (int i = 0; i < 5; i++)
                {
                    _group[i] = 0;
                }

                for (int i = 0; i < 6; i++)
                {
                    if (digits[i] > 36)
                    {
                        _group[4]++;
                    }
                    else if (digits[i] > 27)
                    {
                        _group[3]++;
                    }
                    else if (digits[i] > 18)
                    {
                        _group[2]++;
                    }
                    else if (digits[i] > 9)
                    {
                        _group[1]++;
                    }
                    else
                    {
                        _group[0]++;
                    }
                }

                for (int i = 0; i < 5; i++)
                {
                    if (_group[i] <= 0)
                    {
                        _group_balance++;
                    }
                }

                if (_group_balance >= filter.factor.MaxGroupBalance)
                {
                    return(false);
                }
            }

            // 기록확인
            var _same_jackpot = 0;

            {
                for (int j = 0; j < filter.sequence_no - 1; j++)
                {
                    var _prev = filter.analysies[j];

                    var _count = 0;
                    for (var k = 0; k < 6; k++)
                    {
                        var _value = digits[k];

                        if (_value == _prev.Digit1)
                        {
                            _count++;
                        }
                        if (_value == _prev.Digit2)
                        {
                            _count++;
                        }
                        if (_value == _prev.Digit3)
                        {
                            _count++;
                        }
                        if (_value == _prev.Digit4)
                        {
                            _count++;
                        }
                        if (_value == _prev.Digit5)
                        {
                            _count++;
                        }
                        if (_value == _prev.Digit6)
                        {
                            _count++;
                        }
                    }

                    if (_count >= filter.factor.MaxSameDigits)
                    {
                        _same_jackpot++;
                    }
                }

                if (_same_jackpot >= filter.factor.MaxSameJackpot)
                {
                    return(false);
                }
            }

            return(true);
        }
Exemple #10
0
 public ConnectionFilterPair(string connectionId, TFilter filter)
 {
     ConnectionId = connectionId;
     Filter       = filter;
     CreatedDate  = DateTime.Now;
 }
Exemple #11
0
 public GOFilterEntry(StringHash32 inId)
 {
     Id      = inId;
     Filter  = new TFilter();
     Enabled = true;
 }