コード例 #1
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,
            });
        }
コード例 #2
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));
        }
コード例 #3
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);
        }
コード例 #4
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);
        }
コード例 #5
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);
        }
コード例 #6
0
 public IEnumerable <Position> GetPositionsWithCandidate(House house, Position housePosition, Value value)
 {
     return(HintsHelper
            .GetPositionsInHouse(housePosition, house)
            .Where(pos => HasCandidate(pos, value)));
 }