Problem Statement
You are in the process of creating a crossword puzzle. You've already designed the board, but now you need to come up with words of various sizes to put in the puzzle. An empty crossword puzzle consists of filled squares ('X') and empty squares ('.'). Here is an example of a board with 5 rows and 6 columns:
X....X
X.XX.X
...X..
X.XX.X
..X...
A "slot" of length N is defined as exactly N empty squares in a row, surrounded on either side by either a filled square or the edge of the board. N must be at least 2. There are five horizontal slots in the example puzzle above:
- First row, length = 4
- Third row, length = 3
- Third row, length = 2
- Fifth row, length = 2
- Fifth row, length = 3
Given a
Definition
- Class:
- CrossWord
- Method:
- countWords
- Parameters:
- String[], int
- Returns:
- int
- Method signature:
- int countWords(String[] board, int size)
- (be sure your method is public)
Constraints
- board will contain between 3 and 50 elements, inclusive.
- Each element of board will contain between 3 and 50 characters, inclusive.
- Each element of board will be the same length.
- board will consist of only '.' and 'X' characters, and will contain at least two '.' characters.
- All '.' characters in board will be connected horizontally or vertically.
- size will be between 2 and 50, inclusive.
Examples
{"X....X", "X.XX.X", "...X..", "X.XX.X", "..X..."}
3
Returns: 2
The example from above. Note that there are two horizontal slots with length = 3.
{"...X...", ".X...X.", "..X.X..", "X..X..X", "..X.X..", ".X...X.", "...X..."}
3
Returns: 6
There are two slots of length 3 on both the first and seventh rows, and one slot each on the second and sixth rows, for a total of 6.
{".....X....X....", ".....X....X....", "..........X....", "....X....X.....", "...X....X....XX", "XXX...X....X...", ".....X....X....", ".......X.......", "....X....X.....", "...X....X...XXX", "XX....X....X...", ".....X....X....", "....X..........", "....X....X.....", "....X....X....."}
5
Returns: 8
{"...", "...", "..."}
50
Returns: 0
{"....", "....", "...."}
3
Returns: 0
{"........X.X.XX...X.XX.....XX...X.X....X........", ".......X.......X....X.XX.....X...X.X.X.XX.XX..X", "....X....X..XX..X......XXX...X.X...X..........."}
2
Returns: 3
{"X..X.X..........X", ".X.......X.......", ".X..............X", "....X......X.X...", ".............X...", "..X....X...X.....", ".................", ".......X....X....", "............X..X.", "X...X.......X....", ".................", ".................", "........X........", ".X....X...X......"}
6
Returns: 2
{"XX.XXX.XXX..X......X.....XXXXXX.X.XX...XXX...X...X", ".X...X.X...X.XX.XXXX..XXX..X.XX...XX.XXX...X......", "..XX...X.X......X....X.XXX.X.X.......XX.XXX..X.X.X", "X........XXXXXX....XX..X.X.X.....XXXX.X..X.......X", "XXXXXXXX..XX...X.X.X.X.......XX.X..XX....XX.XX.X.X", "XX....X.XX.XXX...X.......X...XX.......XXXX...X.X.X", ".X.XX.X....XXX.X.XX.X...XXX....X.X.X..XX.X..XX.X.X", "...XX...X.X.XXXX...X...XX...XX..XX..XX...XX..XX...", ".XX...XXX.X......X..XXXX.X.XX..XXX........X....XX.", ".X.X.X.X.......XXXXX..XX...X.X.X...XXX.X....X...XX", "...X.X..X...XX..XXXX...XX.....X..X...X..XX..X..X.X", ".X.X.XX....XXX........XX.XXX.XXX..X..X.X....X....X", ".X.XXX.X.....X.XXX..XXXX.....X...X..XXXXX...X.XX..", "X..XXX....X.XX..X..X.XX...X.X.X..X.....XXXX.XXX...", "X...XXX.XXX...X..X...XXX.X.....X.....XX.....X...XX", "..X.X...XXXXX.XX.X....XX....XX.X.X.X..X.X.XXX....."}
2
Returns: 35
{"....XXXX..X..X...XX.....X..X......", "........X...........X........X....", ".XX....X...X..X..XX...X.......X...", "........X...X...X.....X...........", "....X...XX.XX.........X..X........", "...........X..XX...X......X..X..X.", "..X..X.X......X.......X....X...X..", ".....X.....X...XXXX..........X..X.", "X...X..X.................X........", "X.X..X.......X....X...X...X....XX.", "X..X.X..X..........X.X........X..X", ".........................X........", ".XX.XX......X.........X...........", "......X.....X.........X...X.X.....", "X..............X...X...X..........", ".......X...X.........X........X...", "......XX.X............XX..........", "..X.XX...........X.X..XXX.........", "........X.XX..X....XX......XX..XX.", "XX.....X..XXX....XX........X.....X", ".X.................XX...X....X...X", ".........X....X.....X.......X.....", "................X.........X...XX..", "XX......X....X.XX...X..X..X.......", "...........X......X.X...X.X..X...X", ".X............X...XX..X..X..X....."}
9
Returns: 7
{".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", ".......................................", "......................................."}
39
Returns: 36
{"XX...X....X....XXX", "XXXX.XX..X..XX..XX", "X.....XX.X.XXXX.XX", "XXXX..XX.....X..XX", "..X....XX.XX.XXXX.", "...XXX.X..X..XXXX.", ".X..X..XX.X.X.....", "..X.X.....XXX.X.XX", "...XX..X.X....X.XX", "XX....XXX..X.XX...", "..XXX..XXX..XXX.X.", ".X.....X...XXXXX..", "...XX.....XXX.X.X.", "XX..XXXX...XX.....", "XX.XXXXX..XX...X..", "XX..XXX.X.XX.X..XX", ".....X.....X.XX...", ".XX..XX.XX.X.XX.XX", ".XXX.XX.XXX...XXXX", "..XX...X...X.XXX..", "XXX..XX..X........"}
3
Returns: 12
{".......X.XXXX.X..X.X.........XXXXXX", ".X...XXX.X.XX...XX...X....XX.....X.", "XX.....X...XX.X...XX..XX.XXX..X..X.", "XXX..XXX....X.XXXXXXX......XX.X.XX.", "..X..X.X..X....XXX...X.X..X.XX...X.", "...X...XX.XXX.X......X.XXXX.X......", "..X...X.....X.XX.X.X......X.XX...XX", "X..X.........XXXXX.XXX.......X.....", "XX...XX.X..X.XX..X..X..X.X.X..XXX.X", "XX.....XX..X.X..XX...XXXXXX.XX.....", "X...XX..XXX......XX.X........XX..XX", "....X..X..XXX.XX..XXX.X..X...X...X.", ".X...X...XX.XXX.X....X.X.X...XX....", ".....XXXX....XX..XX.XX.....X....XXX", "..X.X....X.XX.X....XXXXX..XX...X..X", "X....X.X....X.XXXX.X...XX..XXXX...X", "X..X.XXX..X.X..X.......XX.X..XXX..X", "XX.XXX..X..X...X.XXX.X..X.X.X...X..", ".......X.......XXX...XX.X........X.", "..X.XX..XX..XXXX...X..X....XXX.X...", ".XXXX..XX.........XXX.X...XX...XXXX", ".X....X...XXXX.X..XX.....X...XX.XXX", "X.X.X..XX..XX.....XXXX..X..X....X..", "X.X..XXX.X.XXX.....XX..XX...XXX.X.X", "X.X......X..X.XX.XX.....X....X.X..X", "..X..X...X.X..XXXX.XX...X.X.......X", "..X.X......X.XX.X..X...XXXX.XX.....", ".X.XXXX.XX...XX.X.X...X..X..X.XX..X", ".X.XX.X..X.X....X........X..X..X.XX", "....X.....X..XXXXX...X...XX.X..X.XX", "XX....XXX.X....X.XX.XXX.XX..XX.X.X.", "...XXXX.X..X.XXX.XX....X.......X...", "XXX..X.....X.XX.....X.X...X.XXX.XXX", "X.X....X..XX..X..XX..XX..XX......X.", "X...XXXXX..XX..X..X..X..X...XX.X..."}
7
Returns: 7
{"................................................", ".X...X..........................................", "....................X..........................."}
27
Returns: 1
{"................................................", ".X...X..........................................", "....................X..........................."}
26
Returns: 0
{"................................................", ".X...X..........................................", "....................X..........................."}
28
Returns: 0
{"......X.XX", "X.X.X...X.", ".X........", ".XX..XX...", "..XXXXX.X.", "X.X...XX..", "...X......", "X..X......", "X.X...X...", "..X..XX...", ".XX...X.XX", "...XX..X..", ".....X..X.", "X.......X.", "X.X....XX.", "X.XX.X...."}
2
Returns: 9
{"X....XXXXX...XXX...X", "...X.X.XXX.X..XX....", "X..X.X.X..XX...X....", "XXXX.X....XX.X...X.X", "...X.X.XXXXX.XXX..XX", "X.X....X..XX..X.....", "X.....XXX.XX...X..XX", "XX..X.....XXX..X.XX.", "X..X..X...XX...X....", "XXXXX.X...XX.XXXX..X", "..X.XX...X..XXX.X...", "X...XX.X...XXXX.X.X.", "X.X....X..XX....X.XX", "...XX...XXX..XXXX...", "XX.XXXX.XX...XXX...X", "X...XX..XX.X.XXXX..X", "XX...XX.XX.XX..XX.XX", "X...XX.X....X..XX...", ".X........XXXX...X.X", ".X.XXXX.X.....XX.X..", ".XX..XXX..X.X....X.X", ".XX....XX.XXXXX.....", "..XX.X...X.X.X..XXX.", ".XXXXX.X.X.X.......X", ".XXX.X..XX.....X....", ".......XXXXX.XXX..X.", "..X.X.X......X.XXXX.", ".XX.X...X..X.X.XX...", ".XX.X.X.XXX..X..XXX.", "..X.X.XX.X.X..X....X", "X.XXX..X.X.XXXX..X..", "..X..X...X..XX..X..X", "..XX.X..XX.X..XX.X..", "X.X....XXX.X.XX....X", "XXX....X.X.X.....XXX", ".X.XX..X.X.X.XXX.X.X", "...X.X.X.......X....", ".XXX.......XXX..XXX.", ".XX..X.XX..XX..X.X..", ".X..XX.XXX..XXXX....", "...X.X.X.X.XXX...X.X", ".....XX..XX.XX.XXX.X", ".XXX.X...X...XXXXXXX", "XXX.........XXX.....", "X...X.XXXXX.X.....X.", "X.X.X..X......XXXX..", "X.X..XX..XXXXX.....X"}
49
Returns: 0
{"X.......X..X...X..........X.", ".X.........X..XXX..X....X...", "..X......XX.................", "..............X.X....X......", "....XXX...............X.....", ".X...................X......", ".....XX..X.............X....", ".....X........X..X..........", "..........X...............X.", "..X......X........X......XX.", ".....................X......", "...X................X..X.X..", ".................X.....X...X", "...........XXX...X.X........", "......................X.....", "..........................X.", "..........................X.", "...........X.........X......", "........X...................", "......X.......X.............", "...X..X......X....X.........", "................X...........", "............................", ".....X..X............XX.....", ".....X.....X............X..."}
11
Returns: 3
{"X..", "...", "...", "...", "...", "X..", "...", "..X", ".X.", "...", "...", "...", "..X", "...", "..X", "...", "...", "...", "...", "..."}
3
Returns: 14
{"XXX.....", "....X...", "..X.XX..", "X.....X.", "X.....X.", "X......X", ".X.X.X..", "..X..X..", "..X...X.", "X.XXX..X", "......XX", "........", "XXXXX...", "..XX...X", ".....X..", "XX.XX...", "X...XXXX", "XX..XXXX", ".X..X..X", "........", ".XX.X.XX", ".X......"}
3
Returns: 6
{ "X....X", "X.XX.X", "...X..", "X.XX.X", "..X..." }
3
Returns: 2
{ "...", "...", "..." }
3
Returns: 3
{ "...X...", ".X...X.", "..X.X..", "X..X..X", "..X.X..", ".X...X.", "...X..." }
3
Returns: 6
{ "XX....XXX", "....X....", "....X...." }
4
Returns: 5
{ "...X", "...X", "...X" }
3
Returns: 3
{ "....", "....", "...." }
3
Returns: 0