Exemple #1
0
        private void AddUpNeighbours(Peg peg, ICollection <Peg> neighbours)
        {
            if (IsFreeFallPeg(peg))
            {
                neighbours.Add(GetFreeFallPegFrom(peg));
                return;
            }

            var upPeg = GetUpPegFrom(peg);

            if (!upPeg.IsMissingPeg)
            {
                return;
            }

            if (GetUpAndLeftPegFrom(upPeg).IsValid)
            {
                neighbours.Add(GetUpAndLeftPegFrom(upPeg));
            }

            if (GetUpAndRigthPegFrom(upPeg).IsValid)
            {
                neighbours.Add(GetUpAndRigthPegFrom(upPeg));
            }
        }
Exemple #2
0
 private void AddLeftAndUpNeighbours(Peg peg, List <Peg> neighbours)
 {
     if (GetUpAndLeftPegFrom(peg).IsValid)
     {
         neighbours.Add(GetUpAndLeftPegFrom(peg));
     }
 }
Exemple #3
0
 private void AddRigthNeighbours(Peg peg, ICollection <Peg> neighbours)
 {
     if (GetUpAndRigthPegFrom(peg).IsValid)
     {
         neighbours.Add(GetUpAndRigthPegFrom(peg));
     }
 }
Exemple #4
0
        public IEnumerable <Peg> GetPegUpNeighboursFrom(Peg peg)
        {
            var neighbours = new List <Peg>();

            AddLeftAndUpNeighbours(peg, neighbours);
            AddUpNeighbours(peg, neighbours);
            AddRigthNeighbours(peg, neighbours);
            return(neighbours);
        }
Exemple #5
0
 private PegBoard(IPegBoardSource pegBoardSource)
 {
     Columns      = pegBoardSource.Columns * 2 - 1;
     Rows         = pegBoardSource.Rows;
     Goal         = pegBoardSource.Goal;
     MissingPegs  = pegBoardSource.MissingPegs;
     GoalPeg      = Peg.Create(pegBoardSource.Rows, pegBoardSource.Goal * 2 + 1);
     _pegsFactory = new Peg.Factory(Rows, Columns, MissingPegs);
 }
Exemple #6
0
            public PegNode GetByPeg(Peg peg)
            {
                if (!_pegNodesCreated.ContainsKey(peg))
                {
                    _pegNodesCreated[peg] = new PegNode(peg);
                }

                return(_pegNodesCreated[peg]);
            }
Exemple #7
0
        private bool IsFreeFallPeg(Peg peg)
        {
            var upPeg = GetUpPegFrom(peg);

            while (upPeg.IsMissingPeg)
            {
                upPeg = GetUpPegFrom(upPeg);
            }

            return(upPeg.Equals(Peg.OutOfBoard));
        }
Exemple #8
0
        private double UpdateMemoizedProbability(Peg peg, Memoization memoization)
        {
            var updatedMemoizedProbability = memoization.Probability;

            if (_pegNodeStack.PeekPeg().Equals(peg))
            {
                _pegNodeStack.Pop();
            }

            foreach (var pegNode in _pegNodeStack.AsList())
            {
                updatedMemoizedProbability = updatedMemoizedProbability * pegNode.Peg.Probability;
                pegNode.SetMemoization(memoization.Column, updatedMemoizedProbability);
            }

            return(updatedMemoizedProbability);
        }
Exemple #9
0
 public Peg CreateUpAndRigthFrom(Peg peg)
 {
     return(CreatePeg(peg.Row - PegAtBorderProbality, peg.Column + PegAtBorderProbality));
 }
Exemple #10
0
 public Peg CreatePegUpFrom(Peg peg)
 {
     return(CreatePeg(peg.Row - 2, peg.Column));
 }
Exemple #11
0
 private Peg GetFreeFallPegFrom(Peg peg)
 {
     return(_pegsFactory.CreateFreeFallPegFrom(peg));
 }
Exemple #12
0
 private Peg GetUpPegFrom(Peg peg)
 {
     return(_pegsFactory.CreatePegUpFrom(peg));
 }
Exemple #13
0
 public Peg GetUpAndLeftPegFrom(Peg peg)
 {
     return(_pegsFactory.CreateUpAndLeftFrom(peg));
 }
Exemple #14
0
 public PegNode(Peg peg)
 {
     Peg         = peg;
     _linkedPegs = new HashSet <PegNode>();
 }
Exemple #15
0
 public Peg CreateFreeFallPegFrom(Peg peg)
 {
     return(CreatePeg(1, peg.Column));
 }
Exemple #16
0
 private Peg GetUpAndRigthPegFrom(Peg peg)
 {
     return(_pegsFactory.CreateUpAndRigthFrom(peg));
 }
Exemple #17
0
 protected bool Equals(Peg other)
 {
     return(Row == other.Row && Column == other.Column);
 }
Exemple #18
0
 public IEnumerable <Peg> GetBestPositions()
 {
     return(_probabilityByColumn
            .Select(keyValue => Peg.Create(1, keyValue.Key, keyValue.Value))
            .OrderByDescending(peg => peg.Probability));
 }