/// <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); }
/// <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); }