示例#1
0
        /// <summary>
        /// Get the adjacent seats
        /// </summary>
        private IEnumerable <BoatSeat> GetAdjacentSeats(BoatSeat seat)
        {
            var result = seats.Where(x =>
                                     x.Row == seat.Row - 1 && x.Column == seat.Column - 1 ||
                                     x.Row == seat.Row - 1 && x.Column == seat.Column ||
                                     x.Row == seat.Row - 1 && x.Column == seat.Column + 1 ||
                                     x.Row == seat.Row && x.Column == seat.Column - 1 ||
                                     x.Row == seat.Row && x.Column == seat.Column + 1 ||
                                     x.Row == seat.Row + 1 && x.Column == seat.Column - 1 ||
                                     x.Row == seat.Row + 1 && x.Column == seat.Column ||
                                     x.Row == seat.Row + 1 && x.Column == seat.Column + 1);

            return(result);
        }
示例#2
0
        /// <summary>
        /// Get the visible seats
        /// </summary>
        private IEnumerable <BoatSeat> GetVisibleSeats(BoatSeat seat)
        {
            var result = new List <BoatSeat>();

            var leftDiagonalUp    = seats.Where(x => x.Row < seat.Row && x.Column == seat.Column + (seat.Row - x.Row)).OrderByDescending(x => x.Row).FirstOrDefault();
            var up                = seats.Where(x => x.Row < seat.Row && x.Column == seat.Column).OrderByDescending(x => x.Row).FirstOrDefault();
            var rightDiagonalUp   = seats.Where(x => x.Row < seat.Row && x.Column == seat.Column - (seat.Row - x.Row)).OrderByDescending(x => x.Row).FirstOrDefault();
            var left              = seats.Where(x => x.Row == seat.Row && x.Column < seat.Column).OrderByDescending(x => x.Column).FirstOrDefault();
            var right             = seats.Where(x => x.Row == seat.Row && x.Column > seat.Column).OrderBy(x => x.Column).FirstOrDefault();
            var leftDiagonalDown  = seats.Where(x => x.Row > seat.Row && x.Column == seat.Column + (seat.Row - x.Row)).OrderBy(x => x.Row).FirstOrDefault();
            var down              = seats.Where(x => x.Row > seat.Row && x.Column == seat.Column).OrderBy(x => x.Row).FirstOrDefault();
            var rightDiagonalDown = seats.Where(x => x.Row > seat.Row && x.Column == seat.Column - (seat.Row - x.Row)).OrderBy(x => x.Row).FirstOrDefault();

            if (leftDiagonalUp != null)
            {
                result.Add(leftDiagonalUp);
            }
            if (up != null)
            {
                result.Add(up);
            }
            if (rightDiagonalUp != null)
            {
                result.Add(rightDiagonalUp);
            }
            if (left != null)
            {
                result.Add(left);
            }
            if (right != null)
            {
                result.Add(right);
            }
            if (leftDiagonalDown != null)
            {
                result.Add(leftDiagonalDown);
            }
            if (down != null)
            {
                result.Add(down);
            }
            if (rightDiagonalDown != null)
            {
                result.Add(rightDiagonalDown);
            }

            return(result);
        }