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)); } }
private void AddLeftAndUpNeighbours(Peg peg, List <Peg> neighbours) { if (GetUpAndLeftPegFrom(peg).IsValid) { neighbours.Add(GetUpAndLeftPegFrom(peg)); } }
private void AddRigthNeighbours(Peg peg, ICollection <Peg> neighbours) { if (GetUpAndRigthPegFrom(peg).IsValid) { neighbours.Add(GetUpAndRigthPegFrom(peg)); } }
public IEnumerable <Peg> GetPegUpNeighboursFrom(Peg peg) { var neighbours = new List <Peg>(); AddLeftAndUpNeighbours(peg, neighbours); AddUpNeighbours(peg, neighbours); AddRigthNeighbours(peg, neighbours); return(neighbours); }
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); }
public PegNode GetByPeg(Peg peg) { if (!_pegNodesCreated.ContainsKey(peg)) { _pegNodesCreated[peg] = new PegNode(peg); } return(_pegNodesCreated[peg]); }
private bool IsFreeFallPeg(Peg peg) { var upPeg = GetUpPegFrom(peg); while (upPeg.IsMissingPeg) { upPeg = GetUpPegFrom(upPeg); } return(upPeg.Equals(Peg.OutOfBoard)); }
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); }
public Peg CreateUpAndRigthFrom(Peg peg) { return(CreatePeg(peg.Row - PegAtBorderProbality, peg.Column + PegAtBorderProbality)); }
public Peg CreatePegUpFrom(Peg peg) { return(CreatePeg(peg.Row - 2, peg.Column)); }
private Peg GetFreeFallPegFrom(Peg peg) { return(_pegsFactory.CreateFreeFallPegFrom(peg)); }
private Peg GetUpPegFrom(Peg peg) { return(_pegsFactory.CreatePegUpFrom(peg)); }
public Peg GetUpAndLeftPegFrom(Peg peg) { return(_pegsFactory.CreateUpAndLeftFrom(peg)); }
public PegNode(Peg peg) { Peg = peg; _linkedPegs = new HashSet <PegNode>(); }
public Peg CreateFreeFallPegFrom(Peg peg) { return(CreatePeg(1, peg.Column)); }
private Peg GetUpAndRigthPegFrom(Peg peg) { return(_pegsFactory.CreateUpAndRigthFrom(peg)); }
protected bool Equals(Peg other) { return(Row == other.Row && Column == other.Column); }
public IEnumerable <Peg> GetBestPositions() { return(_probabilityByColumn .Select(keyValue => Peg.Create(1, keyValue.Key, keyValue.Value)) .OrderByDescending(peg => peg.Probability)); }