private static IEnumerable <PositionPair> BuildPositionPairs(this Board board, Position start, Direction direction) { var increment = GetIncrement(direction); var current = start + increment; var previous = Maybe <Position> .Nothing; while (board.IsInBounds(current)) { yield return(new PositionPair(previous, current)); previous = current.ToMaybe(); current += increment; } }
private bool AllNeighborsAreDifferent(Position position) => position.Neighbors .Where(neighbor => _board.IsInBounds(neighbor)) .All(neighbor => !_board[position].Equals(_board[neighbor]));