コード例 #1
0
        public override IEnumerable <ISolvingTechnique> FindAll(Grid grid)
        {
            foreach (var value in Value.NonEmpty)
            {
                var(cols, rows, blocks, blockXcols, blockXrows)
                    = HintsHelper.GetCandidatesCountEx(grid, value);

                for (int block = 0; block < 9; block++)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        var col = (block % 3) * 3 + i;
                        if (blocks[block] > 0 &&
                            cols[col] > blockXcols[block, col] &&
                            blocks[block] == blockXcols[block, col])
                        {
                            var positionsToRemove = Position.Cols[col].Where(pos => pos.Block != block).ToList();
                            yield return(new LockedCandidatesPointing(block, value, positionsToRemove));
                        }

                        var row = (block / 3) * 3 + i;
                        if (blocks[block] > 0 &&
                            rows[row] > blockXrows[block, row] &&
                            blocks[block] == blockXrows[block, row])
                        {
                            var positionsToRemove = Position.Rows[row].Where(pos => pos.Block != block).ToList();
                            yield return(new LockedCandidatesPointing(block, value, positionsToRemove));
                        }
                    }
                }
            }
        }
コード例 #2
0
        public NakedPairDisplayer(DomainFacade displayer, NakedPair nakedPair)
            : base(displayer, nakedPair)
        {
            _locKey = "naked-pair";
            _pos1   = nakedPair.Positions.ElementAt(0);
            _pos2   = nakedPair.Positions.ElementAt(1);
            _value1 = nakedPair.Values.ElementAt(0);
            _value2 = nakedPair.Values.ElementAt(1);

            _houses = HintsHelper.GetHouses(_positions);


            _positionsInHouses = new List <Position>();
            foreach (var house in _houses)
            {
                _positionsInHouses.AddRange(HintsHelper.GetPositionsInHouse(_pos1, house));
            }

            _explanationSteps.AddRange(new Action[]
            {
                Explain1,
                Explain2,
                Explain3,
                Explain4,
                Explain5,
            });
        }
コード例 #3
0
        public virtual IEnumerable <int> GetWillUpdateBulkEmailRIds()
        {
            var select = new Select(UserConnection)
                         .Column("RId")
                         .From("BulkEmail")
                         .Where("StatusId").In(Column.Parameters(new object[] {
                TSConfiguration.MarketingConsts.BulkEmailStatusFinishedId,
                TSConfiguration.MarketingConsts.BulkEmailStatusStoppedId,
                TSConfiguration.MarketingConsts.BulkEmailStatusActiveId
            })).And().Exists(
                new Select(UserConnection)
                .Column(Column.SqlText("NULL"))
                .From("MandrillRecipient")
                .Where("BulkEmailRId").IsEqual("RId")
                ) as Select;

            HintsHelper.SpecifyNoLockHints(select, true);

            var result = new List <int>();

            using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) {
                using (IDataReader reader = select.ExecuteReader(dbExecutor)) {
                    int rIdColumnIndex = reader.GetOrdinal("RId");
                    while (reader.Read())
                    {
                        int bulkEmailRId = reader.GetInt32(rIdColumnIndex);
                        result.Add(bulkEmailRId);
                    }
                }
            }

            return(result);
        }
コード例 #4
0
        public override IEnumerable <ISolvingTechnique> FindAll(Grid grid)
        {
            foreach (var value in Value.NonEmpty)
            {
                var(cols, rows, blocks, blockXcols, blockXrows)
                    = HintsHelper.GetCandidatesCountEx(grid, value);

                for (int block = 0; block < 9; block++)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        var col = (block % 3) * 3 + i;
                        if (cols[col] > 0 && blockXcols[block, col] == cols[col] && blocks[block] > cols[col])
                        {
                            var positionsToRemove = Position.Blocks[block]
                                                    .Where(pos => grid.HasCandidate(pos, value) && pos.X != col);
                            yield return(new LockedCandidatesClaiming(value, positionsToRemove, House.Col));
                        }

                        var row = (block / 3) * 3 + i;
                        if (rows[row] > 0 && blockXrows[block, row] == rows[row] && blocks[block] > rows[row])
                        {
                            var positionsToRemove = Position.Blocks[block]
                                                    .Where(pos => grid.HasCandidate(pos, value) && pos.Y != row);
                            yield return(new LockedCandidatesClaiming(value, positionsToRemove, House.Row));
                        }
                    }
                }
            }
        }
コード例 #5
0
        private IEnumerable <Position> GetPositionsToRemove(DomainFacade informer)
        {
            var positionsInHouses = GetHouses()
                                    .SelectMany(house => HintsHelper.GetPositionsInHouse(Pos, house));

            return(positionsInHouses
                   .Where(pos => _values.Any(value => informer.HasCandidate(pos, value)))
                   .Except(_positions));
        }
コード例 #6
0
        private void Explain3()
        {
            SetupDisplayer();
            var posInHouse = HintsHelper.GetPositionsInHouse(_position, _house);

            _displayer.MarkInputOrCandidate(Color.Illegal, posInHouse, _value);
            _displayer.MarkCells(Color.Illegal, posInHouse);
            _displayer.Mark(Color.Legal, _position, _value);
            _displayer.SetDescription(ExplanationKey(3), _value, _value, _houseFormated, _position);
        }
コード例 #7
0
        public override void DisplaySolution()
        {
            SetupDisplayer();

            _displayer.SetDescription(DescriptionKey, _displayer.Format(_house, _position), _value, _position);
            _displayer.SetValueFilter(_value);

            _displayer.MarkCells(Color.Illegal, HintsHelper.GetPositionsInHouse(_position, _house));
            _displayer.MarkCell(Color.Legal, _position);
        }
コード例 #8
0
        /// <summary>
        /// Returns query for count of recipients in queue of bulk email.
        /// </summary>
        /// <param name="bulkEmailId">Unique id of bulk email.</param>
        /// <param name="userConnection">User connection instance.</param>
        /// <returns>Query for count of recipients in queue of bulk email.</returns>
        private static Select GetRecipientsInQueueCountSelect(Guid bulkEmailId, UserConnection userConnection)
        {
            var countSelect = new Select(userConnection)
                              .Column(Func.Count("Id"))
                              .From("VwMandrillRecipient")
                              .Where("BulkEmailId").IsEqual(Column.Parameter(bulkEmailId)) as Select;

            HintsHelper.SpecifyNoLockHints(countSelect, true);
            return(countSelect);
        }
コード例 #9
0
        public FullHouseDisplayer(DomainFacade displayer, FullHouse fullHouse)
            : base(displayer, fullHouse, "full-house")
        {
            _position = fullHouse.Position;
            _value    = fullHouse.Value;

            _house = HintsHelper.HouseFirstOrDefault(_position,
                                                     positions => positions.Count(pos => !_informer.HasValue(pos)) == 1
                                                     );

            _positionsInHouse = HintsHelper.GetPositionsInHouse(_position, _house);

            _explanationSteps.Add(Explain01);
            _explanationSteps.Add(Explain02);
            _explanationSteps.Add(Explain03);
            for (int i = 0; i < _value - 1; i++)
            {
                var explain = ExplainN(i);
                _explanationSteps.Add(explain);
            }

            _explanationSteps.Add(ExplainLast);
        }
コード例 #10
0
 private IEnumerable <House> GetHouses()
 {
     return(HintsHelper.GetHouses(_positions));
 }
コード例 #11
0
 public IEnumerable <Position> GetPositionsWithCandidate(House house, Position housePosition, Value value)
 {
     return(HintsHelper
            .GetPositionsInHouse(housePosition, house)
            .Where(pos => HasCandidate(pos, value)));
 }
コード例 #12
0
 public void InitializeHints()
 {
     this.ExampleHintsAreVisible = !HintsHelper.CheckHintHasAlreadyBeenSeen(this.example.Name);
 }