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)); } } } } }
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, }); }
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); }
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)); } } } } }
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)); }
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); }
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); }
/// <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); }
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); }
private IEnumerable <House> GetHouses() { return(HintsHelper.GetHouses(_positions)); }
public IEnumerable <Position> GetPositionsWithCandidate(House house, Position housePosition, Value value) { return(HintsHelper .GetPositionsInHouse(housePosition, house) .Where(pos => HasCandidate(pos, value))); }
public void InitializeHints() { this.ExampleHintsAreVisible = !HintsHelper.CheckHintHasAlreadyBeenSeen(this.example.Name); }