Problem Statement
A mountain map is a NxM rectangular grid where each cell has a height. The heights are positive integers between 1 and N*M, inclusive, and no two distinct cells have equal heights. Two cells are called neighboring if they share a side or a corner. A cell is called locally minimal if its height is less than the heights of all its neighboring cells.
You are given a String[] data. The j-th character of the i-th element of data is 'X' if the j-th cell in the i-th row of the mountain map is locally minimal, and '.' otherwise. Calculate the number of distinct mountain maps that match the data. Return the result modulo 12345678.
Definition
- Class:
- MountainMap
- Method:
- count
- Parameters:
- String[]
- Returns:
- int
- Method signature:
- int count(String[] data)
- (be sure your method is public)
Constraints
- data will contain between 1 and 4 elements, inclusive.
- Each element of data will contain between 1 and 7 characters, inclusive.
- All elements of data will contain the same number of characters.
- Each character in each element of data will be '.' or uppercase 'X'.
Examples
{".X."}
Returns: 2
The middle cell is lower than its neighbors, so its height is 1. There are two variants of heights for the other cells: the left cell's height is 2 and the right cell's height is 3, or vice versa.
{"X.", ".X"}
Returns: 0
No two neighboring cells can both be locally minimal, so the answer is 0.
{"...", "..."}
Returns: 0
Each mountain map contains at least one locally minimal cell.
{"X.", "..", ".X"}
Returns: 60
{"X.X", "...", "X.X"}
Returns: 4800
{"..X.."}
Returns: 6
{"X"}
Returns: 1
{".......", ".......", ".......", "......."}
Returns: 0
{".X.X", "...X"}
Returns: 0
{"X.", ".X", "..", ".."}
Returns: 0
{"XX"}
Returns: 0
{".......", ".X.X..X", "....X.."}
Returns: 0
{"..X.X.X", "....X..", "X..X.X."}
Returns: 0
{"X", "X", "."}
Returns: 0
{"X", "X", "X"}
Returns: 0
{"XXX...."}
Returns: 0
{"X..", "X..", "..."}
Returns: 0
{"XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX"}
Returns: 0
{".X"}
Returns: 1
{"..X"}
Returns: 1
{"X..."}
Returns: 1
{"X..X."}
Returns: 20
{"X....."}
Returns: 1
{"...X..."}
Returns: 20
{"X", "."}
Returns: 1
{"..", ".X"}
Returns: 6
{"...", "X.X"}
Returns: 60
{"....", "X..."}
Returns: 840
{"....X", "..X.."}
Returns: 68040
{"X.....", "..X..X"}
Returns: 6237000
{"X......", "..X...X"}
Returns: 3816648
{".", ".", "X"}
Returns: 1
{"..", ".X", ".."}
Returns: 120
{"...", ".X.", "..."}
Returns: 40320
{"X.X.", "....", "..X."}
Returns: 3463320
{"..X..", "X....", "..X.X"}
Returns: 8606478
{"....X.", "......", ".X...X"}
Returns: 869490
{"X.X.X.X", ".......", ".X.X.X."}
Returns: 11190438
{".", "X", ".", "X"}
Returns: 5
{"X.", "..", ".X", ".."}
Returns: 2100
{"X..", "...", "..X", "..."}
Returns: 5809020
{"....", "...X", "....", ".X.X"}
Returns: 4688748
{"X....", "..X.X", ".....", "X.X.X"}
Returns: 3559302
{".....X", "..X...", "X.....", "..X.X."}
Returns: 4637916
{"X......", ".......", ".......", "......."}
Returns: 1221642
{".X.....", ".......", ".......", "......."}
Returns: 7469982
{"..X....", ".......", ".......", "......."}
Returns: 2942208
{".......", ".......", ".......", "...X..."}
Returns: 11575062
{".......", ".......", "......X", "......."}
Returns: 4631904
{".......", ".X.....", ".......", "......."}
Returns: 8536770
{".......", "..X....", ".......", "......."}
Returns: 262062
{".......", "...X...", ".......", "......."}
Returns: 11392074
{"X......", ".......", ".......", ".....X."}
Returns: 7557426
{".......", ".......", "......X", ".X....."}
Returns: 5082534
{".......", ".......", ".......", "....X.X"}
Returns: 11620044
{"X......", ".......", ".......", ".....X."}
Returns: 7557426
{"......X", "X......", ".......", "......."}
Returns: 4258728
{".......", "X...X..", ".......", "......."}
Returns: 12136392
{".X....X", ".......", ".......", "......."}
Returns: 6394374
{"......X", "...X...", ".......", "......."}
Returns: 451674
{".....X.", ".......", "....X..", "..X...."}
Returns: 3878712
{"...X...", ".......", "......X", ".X....."}
Returns: 7985862
{"..X....", ".......", ".X...X.", "......."}
Returns: 9644454
{"...X...", ".......", "..X.X..", "......."}
Returns: 10718244
{".......", "....X..", "......X", ".X....."}
Returns: 10884168
{"X......", ".......", ".......", "X.X...."}
Returns: 6434154
{"..X..X.", "X......", "....X..", "......."}
Returns: 11192274
{"...X...", "X....X.", "..X....", "......."}
Returns: 11207628
{".X.X...", ".......", "X.X....", "......."}
Returns: 6120
{".X.....", ".....X.", "X.X....", "......."}
Returns: 4936284
{"..X.X..", "X......", "....X..", "......X"}
Returns: 2611908
{".....X.", "X.X....", "......X", "...X..."}
Returns: 2159478
{"X.X....", ".......", "X.X...X", "....X.."}
Returns: 1890792
{"......X", "X..X...", "......X", "X.X...."}
Returns: 1542204
{"X.X.X..", "......X", "...X...", ".X...X."}
Returns: 3098646
{".......", "X.X.X.X", ".......", "..X.X.X"}
Returns: 2350080
{"X.X.X.X", ".......", "..X...X", "X...X.."}
Returns: 3774366
{"X...X.X", "..X....", "X...X.X", "..X...."}
Returns: 9093312
{".......", ".X...X.", ".......", "......."}
Returns: 6064416
{".......", ".X.....", ".....X.", "......."}
Returns: 4126284
{".......", ".....X.", ".X.....", "......."}
Returns: 4126284
{".......", ".......", ".X...X.", "......."}
Returns: 6064416
{"..X.."}
Returns: 6
{"."}
Returns: 0
{"X.X.X.X", ".......", "X.X.X.X", "......." }
Returns: 3705444
{".X.....", ".......", "...X...", "......." }
Returns: 3941820
{"X.", ".." }
Returns: 6
{"....X.", "......", "X....X", "...X.." }
Returns: 10044774
{"X..X..X", ".......", "X..X..X", "......." }
Returns: 1079910