Problem Statement
Battleship is a game in which two players try to sink each other's ships. Each player has a 10x10 square grid on which he must place 10 ships. Each ship consists of between 1 and 4 cells arranged in a straight line. Ships must be placed parallel to the sides of the board, and no two ships can share a cell or touch each other. Touching is defined as occupying cells that share a vertex. Each player must place the following ships on his board: 4 ships of length 1, 3 of length 2, 2 of length 3, and 1 of length 4.
The effectiveness of a player's board is defined as the number of rows that contain no ships plus the number of columns that contain no ships. You will be given a
Definition
- Class:
- BattleshipChecker
- Method:
- checkBoard
- Parameters:
- String[]
- Returns:
- String
- Method signature:
- String checkBoard(String[] board)
- (be sure your method is public)
Notes
- The return value for an accepted board with a non-plural effectiveness must still end with "POINTS" (not "POINT").
Constraints
- board will contain exactly 10 elements.
- Each element of board will contain exactly 10 characters.
- Each character of each element of board will be either '.' or 'X'.
Examples
{"......X...", ".XXX..X...", "......X...", "X.X...X...", "X.........", "...XX.X...", "......X...", ".XX...X...", "..........", ".X.X..X..."}
Returns: "ACCEPTED, 5 POINTS"
This one is correct, and has 4 free columns and 1 free row, for a total of 5 points.
{"X.X.X.X...", "......X...", ".XX...X...", "......X...", "......X..X", "...X..X...", "...X..X...", "......X...", "..XX..X...", "......X..."}
Returns: "REJECTED"
It is unacceptable to have a ship of size 1x10.
{".....XX...", ".XX.......", "..........", ".X....XXX.", ".X........", ".....X....", "..X..X....", ".....X....", "...X......", "X.....XXXX"}
Returns: "REJECTED"
One 1x1 ship is missing.
{".....XX..X", ".XX......X", "..........", ".X....XXX.", ".X........", ".....X..X.", "..X..X....", ".....X....", "...X......", "X.....XXXX"}
Returns: "REJECTED"
There is one extra 1x2 ship.
{".....XX..X", ".XX......X", "..........", "......XXX.", "..........", ".....X..X.", "..X..X....", ".....X....", "...X......", "X.....XXXX"}
Returns: "ACCEPTED, 3 POINTS"
{"X.......X.", "...XXXX...", ".X......X.", "....XX....", ".........X", ".........X", ".....XXX..", ".........X", "..X......X", "..X......X"}
Returns: "ACCEPTED, 0 POINTS"
This is a valid configuration even though it is not very effective.
{"X.......X.", "...XXXX...", ".X......X.", "....XX....", "...X.....X", "...X.....X", ".....XXX..", ".........X", ".........X", ".........X"}
Returns: "REJECTED"
Diagonal touching is not allowed.
{"..........", "..........", "..........", "..........", "..........", "..........", "..........", "..........", "..........", ".........."}
Returns: "REJECTED"
{"X........X", "..........", "..........", "..........", "..........", "..........", "..........", "..........", "..........", "X........X"}
Returns: "REJECTED"
{"XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX"}
Returns: "REJECTED"
{".XXXXXXXX.", "XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX", "XXXX.XXXXX", "XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX", "XXXXXXXXXX", ".XXXXXXXX."}
Returns: "REJECTED"
{"....XXX..X", "XXXXX.XXXX", "XXXXXXXXXX", "XX.XX.XXXX", "XX.XXXX...", "XX.XX.XXXX", "XXXXXXXXXX", "XXXXX.XXXX", "XXXXXXXXXX", "X..XXX..XX"}
Returns: "REJECTED"
{"XXXX...XXX", "..........", "....XXX...", ".XX.......", ".....X....", ".......XX.", "..X.......", "....XX....", ".......X..", ".....X...."}
Returns: "ACCEPTED, 1 POINTS"
{"XXXX...XXX", "..........", "....XXX...", ".XX.......", ".....X....", ".......XX.", "...X......", "....XX....", ".......X..", ".....X...."}
Returns: "REJECTED"
{"XXXX...XXX", "..........", "....XXX...", ".XX.......", ".....X....", ".......XX.", "..........", "...XXX....", ".......X..", ".....X...."}
Returns: "REJECTED"
{"XXXX...XXX", "..........", "....XXX...", ".XX.......", ".....X....", ".XX....XX.", "..........", "...XXX....", ".X.....X..", ".....X...."}
Returns: "REJECTED"
{"XXXX......", "..........", ".......X..", ".XX.......", ".....X....", ".XX....XX.", "..........", "...XXX....", ".......X..", ".....X...."}
Returns: "REJECTED"
{"...X.X.X.X", "...X.X....", "...X...X.X", "...X.X....", ".....X....", "...X......", "...X.X....", "...X.X....", "..........", "...XXX...."}
Returns: "ACCEPTED, 6 POINTS"
{"..XXXX....", "..........", "......X..X", "......X...", "..XX......", "......XXX.", "...XX.....", ".........X", ".X...X...X", "....X....X"}
Returns: "REJECTED"
{"..XXXX....", "..........", "......X..X", "......X.X.", "..XX......", "......XXX.", "...XX.....", ".........X", ".X...X...X", ".........X"}
Returns: "REJECTED"
{"..XXXX....", "..........", "......X..X", "......X...", "..XX......", "......XXX.", "...XX.....", ".........X", ".X...X...X", "..X......X"}
Returns: "REJECTED"
{"..........", "..X...X...", "..........", ".X.XXXX.X.", "........X.", ".X.XXX....", "........X.", ".XXX.XX.X.", "..........", ".........."}
Returns: "ACCEPTED, 7 POINTS"
{"XXXX..X..X", "..........", "X........X", ".........X", "X........X", "X.........", "..........", "X........X", ".........X", "XXX..XX..."}
Returns: "ACCEPTED, 5 POINTS"
{"XXXX..X..X", "..........", "X........X", ".........X", "X........X", "X.........", ".X........", "X........X", ".........X", "XXX..XX..."}
Returns: "REJECTED"
{"XXXX..X...", ".....X....", "X........X", ".........X", "X........X", "X.........", "..........", "X........X", ".........X", "XXX..XX..."}
Returns: "REJECTED"
{"XXXX..X..X", "..........", ".........X", ".........X", "X........X", "X.........", "........X.", "X........X", ".........X", "XXX..XX..."}
Returns: "REJECTED"
{"X....XX...", "...X......", "........X.", ".X..X.....", ".X..X...XX", ".X..X.....", "....X...XX", "..........", ".X......XX", "...XXX...."}
Returns: "REJECTED"
{"X.....X...", "...X......", "........X.", ".X..X.....", ".X..X...XX", ".X..X.....", "....X...XX", "..........", ".X......XX", "...XXX...."}
Returns: "REJECTED"
{"X.........", "...X......", "........X.", ".X..X.....", ".X..X..X..", ".X..X..X..", "....X...XX", "..........", ".X......XX", "...XXX...."}
Returns: "REJECTED"
{"X.........", "...X......", "........XX", ".X..X.....", ".X..X..X..", ".X..X..X..", ".........X", "..........", ".X......XX", "..XXXX...."}
Returns: "REJECTED"
{"X.........", "...X......", "........XX", ".X..X.....", ".X..X..X..", ".X..X..X..", ".........X", "..........", "X.......XX", "..XXXX...."}
Returns: "ACCEPTED, 2 POINTS"
{"X.........", ".X........", "........XX", ".X..X.....", ".X..X..X..", ".X..X..X..", ".........X", "..........", "X.......XX", "..XXXX...."}
Returns: "REJECTED"
{"X.........", "..........", "........XX", ".X..X.....", ".X..X..X..", ".X..X..X..", ".........X", "X.........", "X.......X.", "..XXXX...X"}
Returns: "REJECTED"
{".........X", ".X......X.", ".X....X...", "......X...", ".XXX..X...", "......X...", ".X......X.", "....XX..X.", "..X.......", ".......XXX"}
Returns: "REJECTED"
{"....X....X", ".X......X.", ".X....X...", "......X...", ".XXX..X...", "......X...", ".X......X.", "....XX....", "..X.......", ".......XXX"}
Returns: "REJECTED"
{"....X....X", ".X........", ".X....X...", "......X...", ".XXX..X...", "......X...", "........X.", "....XX..X.", "..........", "X......XXX"}
Returns: "REJECTED"
{"....X....X", ".X........", ".X....X...", "......X...", ".XXX..X...", "......X...", "........X.", ".X..XX..X.", "..........", "X......XXX"}
Returns: "ACCEPTED, 1 POINTS"
{"...X......", "X..X......", "...X......", "X..X......", ".....XXX..", "X.........", "....X.....", "X...X.....", "..........", ".XXX.XX.XX"}
Returns: "ACCEPTED, 1 POINTS"
{"...X......", "X..X......", "...X......", "X..X......", "...XXX....", "X.........", "....X.....", "X...X.....", "..........", ".XXX.XX.XX"}
Returns: "REJECTED"
{"...X......", "X..X......", "...X......", "X..X......", "....XXX...", "X.........", "....X.....", "X...X.....", "..........", ".XXX.XX.XX"}
Returns: "REJECTED"
{"...X......", "X..X......", "...X......", "X..XXX....", "..........", "X.........", "....X.....", "X...X.....", "..........", ".XXX.XX.XX"}
Returns: "REJECTED"
{"XXXXXXXXXX", "..........", "..........", "..........", "..........", "..........", "..........", "..........", "..........", "XXXXXXXXXX"}
Returns: "REJECTED"
{"XXXXXXXXXX", "X........X", "X........X", "X........X", "X........X", "X........X", "X........X", "X........X", "X........X", "XXXXXXXXXX"}
Returns: "REJECTED"
{"..........", "..........", "...XXXXXX.", "...X....X.", "...X....X.", "...X....X.", "...X....X.", "...XXXXXX.", "..........", ".........."}
Returns: "REJECTED"
{"XXXX.X....", "..........", "XXX.XX....", "..........", "XXX.XX....", "..........", "X.XX.X....", "..........", "..........", ".........."}
Returns: "REJECTED"
{"XXXX.X.X..", "..........", "XXX..XX...", "..........", "XXX..XX...", "..........", "XX.X.X....", "..........", "..........", ".........."}
Returns: "ACCEPTED, 9 POINTS"
{"X..XX...X.", "........X.", "..XX....X.", "..........", "...XXXX...", "........X.", ".X........", "......X..X", "XXX...X...", ".........."}
Returns: "ACCEPTED, 3 POINTS"
{"X.......X.", "........X.", "..XX....X.", "..........", "...XXXX...", "........X.", ".X........", "......X..X", "XXX...X...", ".........."}
Returns: "REJECTED"
{"X..XX...X.", "........X.", "..XX....X.", "..........", "...XXXX...", "........X.", ".X........", "......X..X", "XXX...X...", "........XX"}
Returns: "REJECTED"
{"...XX...X.", "........X.", "..XX....X.", "..........", "...XXXX...", "........X.", ".X........", "......X..X", "XXX...X...", ".........."}
Returns: "REJECTED"
{"X..XX...X.", "........X.", "..XX....X.", "..........", "...XXXX...", "........X.", ".X........", "......X..X", "XXX...X...", "....X....."}
Returns: "REJECTED"
{"X..XX...X.", "........X.", "..XX....X.", "..........", "...XXXX...", "........X.", ".X........", "......X..X", "......X...", ".........."}
Returns: "REJECTED"
{"X..XX...X.", "........X.", "X.XX....X.", "X.........", "X..XXXX...", "........X.", ".X........", "......X..X", "XXX...X...", ".........."}
Returns: "REJECTED"
{"X..XX...X.", "........X.", "..XX....X.", "..........", "..........", "........X.", ".X........", "......X..X", "XXX...X...", ".........."}
Returns: "REJECTED"
{"X..XX...X.", "........X.", "X.XX....X.", "X.........", "X..XXXX...", "X.......X.", "..X.......", "......X..X", "XXX...X...", ".........."}
Returns: "REJECTED"
{"X..XX...X.", "........X.", "..XX....X.", "..........", "..XX.XX...", "........X.", ".X........", "......X..X", "XXX...X...", ".........."}
Returns: "REJECTED"
{"X........X", "...XXX....", "X........X", ".........X", "X..XXXX...", "..........", "..XXX.....", "........X.", "........X.", ".....XX..."}
Returns: "ACCEPTED, 3 POINTS"
{"X........X", "...XXX....", "X........X", ".........X", "X..XXXX...", "..........", "..XX.X....", "........X.", "........X.", ".....XX..."}
Returns: "REJECTED"
{"X........X", "...XXX....", "X........X", ".........X", "X..XXXX...", "..........", "..XXX...X.", "..........", "........X.", ".....XX..."}
Returns: "REJECTED"
{"X........X", "...XXX....", "X........X", ".........X", "X..XXXX...", "..........", "..XXX.....", ".......X..", "........X.", ".....XX..."}
Returns: "REJECTED"
{"...XXXX...", "........X.", "..X.XX....", "..X....X..", "....XX....", "..X.......", "....XXX...", "..........", "...XXX.X..", ".........."}
Returns: "ACCEPTED, 5 POINTS"
{"...XXXX...", "........X.", "..X.XX....", "..X.......", "....XX....", "..X.......", "....XXX...", "..........", "...XXX.X..", "........X."}
Returns: "REJECTED"
{"...XXXX...", ".......X..", "..X.XX....", "..X....X..", "....XX....", "..X.......", "....XXX...", "..........", "...XXX.X..", ".........."}
Returns: "REJECTED"
{"...XXX....", ".X......X.", ".X..X.....", ".X..X...XX", "....X.....", "....X.....", "..........", "..XX..XX..", ".........X", "....X.X..."}
Returns: "ACCEPTED, 2 POINTS"
{"...XXX....", ".X......X.", ".X..X.....", ".X..X...XX", "....X.....", "X...X.....", "X.........", "X.XX..XX..", "X........X", "X...X.X..."}
Returns: "REJECTED"
{"...XXX....", ".X......X.", ".X..X.....", ".X..X...XX", "....X.....", "....X.....", "....X.....", ".XX...XX..", "..........", "....X.X..."}
Returns: "REJECTED"
{"...XXX....", ".X......X.", ".X..X.....", ".X..X...XX", "....X.....", "....X.....", "....X.....", ".XX...XX..", "..........", ".X..X.X..."}
Returns: "REJECTED"
{"...XXX....", ".X......X.", ".X........", ".X..X...XX", "....X.....", "....X.....", "....X.....", ".XX...XX..", "..........", "X...X.X..."}
Returns: "ACCEPTED, 1 POINTS"
{"X..X..X..X", "..........", "XX..XX..XX", "..........", "XX..XX....", "X...X.....", "..........", "XX........", "XX........", ".........." }
Returns: "REJECTED"
{"......X..X", ".XXX..X..X", "......X..X", "X.X...X..X", "X........X", "...XX.X...", "......X...", ".XX...X...", "..........", ".X.X..X..." }
Returns: "REJECTED"
{"X..XXXX.X.", "..........", ".X......X.", "....XX....", ".........X", ".........X", ".....XXX..", ".........X", "..X......X", "..X......X" }
Returns: "ACCEPTED, 1 POINTS"
{"X.X.X.X.XX", "..........", "XX.XX..XXX", "..........", "XXXX...XXX", "..........", ".....XXXXX", "..........", "..........", ".........." }
Returns: "REJECTED"
{"XXXX......", "..........", "X.X.X.X.XX", "..........", "XX.XXX.XXX", "..........", "........XX", "..........", "..........", ".........." }
Returns: "ACCEPTED, 6 POINTS"
{"..........", ".XXX..X...", "......X...", "X.X...X...", "X.........", "..XXX.X...", "......X...", ".XX...X...", "..........", ".X.X..X..." }
Returns: "REJECTED"