Problem Statement
- 1) Initially, set the current direction to Right.
- 2) If you are on the destination spot, exit this process.
- 3a) If taking 1 step in the current direction will lead to a blank spot or the destination take the step.
- 3b) If taking 1 step in the current direction will lead to a wall or will leave the bounds of the maze, change the current direction by turning 45 degrees clockwise. For example, if the current direction is set to Right then turning 45 degrees clockwise will set the current direction to Down-Right.
- 4) Go to step 2.
Definition
- Class:
- BadMazeStrategy
- Method:
- numSteps
- Parameters:
- String[]
- Returns:
- int
- Method signature:
- int numSteps(String[] maze)
- (be sure your method is public)
Notes
- If your character is at (element E, character C) of maze, and the current direction is Down-Right, then taking one step would leave you at (element E+1, character C+1) of maze. The other diagonal directions are treated analogously.
- The following sequence of directions are formed by consecutively turning 45 degrees clockwise:Right, Down-Right, Down, Down-Left, Left, Up-Left, Up, Up-Right, Right.
Constraints
- maze will contain between 1 and 50 elements inclusive.
- Each element of maze will contain between 1 and 50 characters inclusive.
- Each element of maze will contain the same number of characters.
- Each character in maze will be (quotes for clarity) '.', 'X', 'Y', or 'D'.
- maze will contain exactly one 'Y' and one 'D'.
Examples
{"XXXXXXX" ,"X.....X" ,"X.....X" ,"XY...DX" ,"X.....X" ,"XXXXXXX"}
Returns: 4
After taking 4 steps to the right, we reach the destination.
{"XXXXXXX" ,"XY....X" ,"X.....X" ,"X.....X" ,"X....DX" ,"XXXXXXX"}
Returns: 7
After taking 4 steps to the right, continuing would lead into a wall. After changing direction to Down-Right we are still facing a wall, so we change directions again. Now facing downward we take 3 more steps and reach the destination.
{"XXXXXXX" ,"XY....X" ,"X.....X" ,"X..D..X" ,"X.....X" ,"XXXXXXX"}
Returns: -1
We keep running around the perimeter while the destination lies in the center.
{"DY............."}
Returns: 27
Don't run off the maze.
{"Y..X.............." ,"XXX.XXXXXXXXXXXX.X" ,".X.X.XX.......D..." ,".XX.XXX..........."}
Returns: 39
{".........................D" ,"X........................." ,".XXXXXXXXXXXXXXXXXXXXXXXXX" ,"Y........................."}
Returns: 76
{"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ,"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ,"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ,"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ,"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ,"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ,"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ,"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ,".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ,".................................................." ,"DXY.............................................XX" }
Returns: -1
{"Y.................................XD"}
Returns: -1
{".................................................." ,".D................................................" ,".X................................................" ,"................................................XX" ,"Y................................................." ,".................................................."}
Returns: 203
{".................................................D" ,"Y................................................."}
Returns: 148
{".................................................." ,"..XX.............................................." ,"................................................X." ,"...XD...........................................X." ,"...X.............................................." ,".X............................................XX.." ,".X................................................" ,"................................................XX" ,"Y................................................." ,".................................................."}
Returns: 305
{"Y................................................." ,"D................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." }
Returns: 195
{"D" ,"Y" ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"." ,"."}
Returns: 97
{"YX................................................" ,"..D..............................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." }
Returns: -1
{"YX................................................" ,"X................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................D" ,".................................................." }
Returns: 242
{"YX................................................" ,"X................................................." ,".................................................." ,"..D..............................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".................................................." ,".X................................................" ,".X................................................" ,"................................................XX" ,".................................................." }
Returns: 330
{"YD"}
Returns: 1
{"DY"}
Returns: 1
{"DXY" ,"XXX"}
Returns: -1
{"DX" ,"XY"}
Returns: 1
{"Y........XXXX" ,"XXXXXXXXX.XXX" ,"XXXXXXXXXX.XX" ,"XXXXXXXXXXX.X" ,"XXXXXXXXXXXX." ,"XXXXXXXXXXXX." ,"XXXXXXXXXXXX." ,"XXXXXXXXXXXX." ,"XXXXXXXXXXX.X" ,"XXXXXXXXXXXDX"}
Returns: -1
{"Y........XXXX" ,"XXXXXXXXX.XXX" ,"XXXXXXXXXX.XX" ,"........XXX.X" ,".XXXXXXX.XXX." ,".XX...XX.XXX." ,".XX.XXDX.XXX." ,".XXX.....XXX." ,".XXXXXXXXXX.X" ,"X..........XX"}
Returns: 52
{ "XXXXXXX", "XY....X", "X.....X", "X.....X", "X....DX", "XXXXXXX" }
Returns: 7
{ "DY............." }
Returns: 27
{ "YXD" }
Returns: -1
{ "DXY" }
Returns: -1
{ "XXXD", "XYX.", "XXX." }
Returns: -1
{ "XXXX", "XYXX", "XXXX", "...D" }
Returns: -1
{ "Y.................................................", "D................................................." }
Returns: 99
{ "XXY...XXDX" }
Returns: -1
{ "XXXXXXX", "X.....X", "X.Y...X", "X..D..X", "X.....X", "XXXXXXX" }
Returns: -1
{ "XXX", "YXD", "XXX" }
Returns: -1
{ "YX.", "XXX", ".XD" }
Returns: -1
{ "DY....X", "XXXX..X" }
Returns: -1
{ "XXXXXXX", "XY....X", "X.....X", "X..D..X", "X.....X", "XXXXXXX" }
Returns: -1
{ "XXX", "XDX", "XXX", "XYX", "XXX" }
Returns: -1
{ "XXX", "XYX", "XXX", "XDX" }
Returns: -1
{ "XXXXX", "XYXDX", "XXXXX" }
Returns: -1
{ "XYXDX" }
Returns: -1
{ "Y..X..............", "XXX.XXXXXXXXXXXX.X", ".X.X.XX.......D...", ".XX.XXX..........." }
Returns: 39
{ "DY...", "XXXX.", "X....", "X....", "XXXXX" }
Returns: -1
{ "Y...", "DX.." }
Returns: -1
{ ".Y.", ".D.", "..." }
Returns: -1
{ "XXXXXX", "X....X", "X.DY.X", "X....X", "XXXXXX" }
Returns: -1
{ "XXXXXXX", "X.....X", "X.X.X.X", "X..Y..X", "X.D.X.X", "X.....X", "XXXXXXX" }
Returns: -1
{ "XXXXXX", "X....X", "X.Y..X", "X..D.X", "X....X", "XXXXXX" }
Returns: -1
{ "YXD", "XXX" }
Returns: -1
{ "XXXXXXX", "X.....X", "X..D..X", "XY....X", "X.....X", "XXXXXXX" }
Returns: -1
{ "DY..", "XX..", "XX.." }
Returns: -1
{ "D", "X", "Y" }
Returns: -1
{ "X..X.", "Y..XD", "X..X.", "X..X." }
Returns: -1
{ "YXXX", "XXDX" }
Returns: -1
{ ".............", ".............", "........D....", "......X.....X", ".......X.....", ".............", "..Y..........", "...........XX", "X............", ".......X.....", ".......X....." }
Returns: 79
{ "D...Y" }
Returns: 4
{ "Y..", "DX." }
Returns: -1
{ "XXXD", "XYX.", "XXXX" }
Returns: -1
{ "YXX", "XDX", "XXX" }
Returns: 1
{ "XXX.D", "XYX..", "XXX.." }
Returns: -1
{ "....", ".DY.", "...." }
Returns: -1
{ "XXXXXX", "XY.XDX", "XXXXXX" }
Returns: -1
{ "XXXXX", "DY..X", "XXX.X", "X...X", "XXXXX" }
Returns: -1
{ "XXXXXXX", "X.....X", "XXXD..X", "XYX...X", "XXX...X", "XXXXXXX" }
Returns: -1
{ "XXXXX", "XYXXX", "XXXDX", "XXXXX" }
Returns: -1
{ "Y.................................................", "XX................................................", "................................................X.", "..XX............................................X.", "..............................................X...", "....XX........................................X...", "............................................X.....", "......XX....................................X.....", "..........................................X.......", "........XX................................X.......", "........................................X.........", "..........XX............................X.........", "......................................X...........", "............XX........................X...........", "....................................X.............", "..............XX....................X.............", "..................................X...............", "................XX................X...............", "................................X.................", "..................XX............X.................", "..............................X...................", "....................XX........X...................", "............................X.....................", "......................XX....X.....................", "..........................X.......................", "..........................X.......................", ".....................X............................", ".....................X............................", "...................X......XX......................", "...................X..............................", ".................X..........XX....................", ".................X................................", "...............X..............XX..................", "...............X..................................", ".............X..................XX................", ".............XD...................................", "...........X......................XX..............", "...........X......................................", ".........X..........................XX............", ".........X........................................", ".......X..............................XX..........", ".......X..........................................", ".....X..................................XX........", ".....X............................................", "...X......................................XX......", "...X..............................................", ".X..........................................XX....", ".X................................................", "..............................................XX..", ".................................................." }
Returns: 1099
{ "XXXXXXX", "XYX...X", "XXX...X", "X.....X", "X....DX", "XXXXXXX" }
Returns: -1
{ "Y", ".", ".", ".", ".", ".", ".", ".", ".", "D" }
Returns: 9
{ "DY................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", "..................................................", ".................................................." }
Returns: 195
{ "XYX", ".D.", "X.X" }
Returns: -1
{ "XD", "YX" }
Returns: 1
{ "XXXXXX", "XYXXXX", "XXXXXX", "XDXXXX", "XXXXXX" }
Returns: -1