Statistics

Problem Statement for "MirrorPath"

Problem Statement

NOTE: This problem statement contains an image that may not display properly if viewed outside of the applet.

You will be given the map of a maze containing mirrors. There will be exactly two openings on the boundary of the maze. A laser shined through one opening will reflect off the mirrors and exit through the other opening. You are to write a method that outputs the map of the maze with the laser's path drawn in it.

Mirrors are always at a 45-degree angle to the axis of the maze, and deflect the laser at a right angle. The maze will consist of walls ('#'), open spaces ('.'), and mirrors ('/' and '`') arranged on a regular grid. Your method should replace some or all of the '.' characters in the map with '|', '-', and '+' characters, indicating the open spaces where the laser travels vertically, travels horizontally, and crosses its own path, respectively.

For example, given the following three mazes:

    #######    #######    #######
    ##....#    ##/..`#    ##/..`#
    ##.##.#    ##.##.#    ##.##.#
    ##.##.#    ##.##.#    ##.##.#
    ..`...#    ...../#    ../../#
    ##.####    ##.####    ##.####
    ##.####    ##.####    ##.####

the laser would be reflected as shown in the following figure:

and the solutions for each of these three examples are as follows:

    #######    #######    #######
    ##....#    ##/--`#    ##/--`#
    ##.##.#    ##|##|#    ##|##|#
    ##.##.#    ##|##|#    ##|##|#
    --`...#    --+--/#    --/--/#
    ##|####    ##|####    ##|####
    ##|####    ##|####    ##|####

Note that the laser can bounce of both sides of the same mirror.

Definition

Class:
MirrorPath
Method:
path
Parameters:
String[]
Returns:
String[]
Method signature:
String[] path(String[] map)
(be sure your method is public)

Notes

  • Since '\' is a special character, we will use the '/' (forward slash) and '`' (back quote) characters to indicate mirrors in the input.

Constraints

  • map will contain between 3 and 50 elements, inclusive.
  • The length of each element of map will be the same, and be between 3 and 50, inclusive.
  • map will contain only the characters '#', '.', '/', and '`'.
  • Exactly 2 characters on the boundary of map will be '.'. All other characters on the boundary will be '#'.
  • The characters in the four corners of map will be '#'.
  • The map will be such that if a laser is shined through one opening on the boundary, it will exit through the other opening.

Examples

  1. { "#.#", "#.#", "#.#" }

    Returns: {"#|#", "#|#", "#|#" }

  2. { "############", "#######/....", "######//####", "#####//#####", "####//######", "..../#######", "############" }

    Returns: {"############", "#######/----", "######//####", "#####//#####", "####//######", "----/#######", "############" }

  3. { "##.#####", "##./`/`#", "#/..../#", "#`....`#", "##`/`/.#", "######.#" }

    Returns: {"##|#####", "##|/`/`#", "#/++++/#", "#`++++`#", "##`/`/|#", "######|#" }

  4. { "###", "...", "###" }

    Returns: {"###", "---", "###" }

  5. { "###", "#/.", "#`.", "###" }

    Returns: {"###", "#/-", "#`-", "###" }

  6. { "#######", "##/..`#", "##.##.#", "##.##.#", "...../#", "##.####", "##.####" }

    Returns: {"#######", "##/--`#", "##|##|#", "##|##|#", "--+--/#", "##|####", "##|####" }

    This is the second example in the problem statement.

  7. { "###########.#", "#/........./.", "#.#########.#", "#`........./#", "#############" }

    Returns: {"###########|#", "#/---------/-", "#|#########|#", "#`---------/#", "#############" }

    This is similar to the third example in the problem statement.

  8. { "########.##", "#./......`#", "#../.`....#", "#.`...../.#", "#....`.../#", "###.#######" }

    Returns: {"########|##", "#./-----+`#", "#.|/-`..||#", "#.`+-+--/|#", "#..|.`---/#", "###|#######" }

  9. { "##################################################", "#.........../.........`....................../..`#", "#..../........................................../#", "#............................................`..`#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#./.................../............`.............#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#.`../................`........................./#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#.....................`............/.............#", "#....`............................................", "#................................................#", "#................................................#", "############.#####################################" }

    Returns: {"##################################################", "#.........../---------`....................../--`#", "#..../------+---------+----------------------+--/#", "#....|......|.........|......................`--`#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#....|......|.........|.........................|#", "#./--+------+---------/------------`............|#", "#.|..|......|.........|............|............|#", "#.|..|......|.........|............|............|#", "#.|..|......|.........|............|............|#", "#.|..|......|.........|............|............|#", "#.`--/------+---------`------------+------------/#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........|............|.............#", "#....|......|.........`------------/.............#", "#....`------+-------------------------------------", "#...........|....................................#", "#...........|....................................#", "############|#####################################" }

  10. { "##################################################", "#./`../`../`../`../`../`../`../`../`../`../`../`.#", "#/..`/..`/..`/..`/..`/..`/..`/..`/..`/..`/..`/./.#", "#`.............................................`.#", "#.`.............................................`#", "#./............................................./#", "#/............................................./.#", "#`.............................................`.#", "#.`.............................................`#", "#./............................................./#", "#/............................................./.#", "#`.............................................`.#", "#.`.............................................`#", "#./............................................./#", "#/............................................./.#", "#`.............................................`.#", "#.`.............................................`#", "#./............................................./#", "#/............................................./.#", "#`.............................................`.#", "#.`.............................................`#", "#./............................................./#", "#/............................................./.#", "#`.............................................`.#", "#.`.............................................`#", "#./............................................./#", "#/............................................./.#", "#`.............................................`.#", "#.`.............................................`#", "#./............................................./#", "#/............................................./.#", "#`.............................................`.#", "#.`.............................................`#", "#./............................................./#", "#/............................................./.#", "#`.............................................`.#", "#.`.............................................`#", "#./............................................./#", "#/............................................./.#", "#`.............................................`.#", "#.`.............................................`#", "#./............................................./#", "#/............................................./.#", "#`.............................................`.#", "#.`.............................................`#", "................................................/#", ".............................................../.#", "#./.../`../`../`../`../`../`../`../`../`../`...`.#", "#.`/`/..`/..`/..`/..`/..`/..`/..`/..`/..`/..`/`/.#", "##################################################" }

    Returns: {"##################################################", "#./`../`../`../`../`../`../`../`../`../`../`../`.#", "#/++`/++`/++`/++`/++`/++`/++`/++`/++`/++`/++`/+/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "#./+++++++++++++++++++++++++++++++++++++++++++++/#", "#/+++++++++++++++++++++++++++++++++++++++++++++/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "#./+++++++++++++++++++++++++++++++++++++++++++++/#", "#/+++++++++++++++++++++++++++++++++++++++++++++/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "#./+++++++++++++++++++++++++++++++++++++++++++++/#", "#/+++++++++++++++++++++++++++++++++++++++++++++/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "#./+++++++++++++++++++++++++++++++++++++++++++++/#", "#/+++++++++++++++++++++++++++++++++++++++++++++/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "#./+++++++++++++++++++++++++++++++++++++++++++++/#", "#/+++++++++++++++++++++++++++++++++++++++++++++/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "#./+++++++++++++++++++++++++++++++++++++++++++++/#", "#/+++++++++++++++++++++++++++++++++++++++++++++/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "#./+++++++++++++++++++++++++++++++++++++++++++++/#", "#/+++++++++++++++++++++++++++++++++++++++++++++/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "#./+++++++++++++++++++++++++++++++++++++++++++++/#", "#/+++++++++++++++++++++++++++++++++++++++++++++/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "#./+++++++++++++++++++++++++++++++++++++++++++++/#", "#/+++++++++++++++++++++++++++++++++++++++++++++/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "#./+++++++++++++++++++++++++++++++++++++++++++++/#", "#/+++++++++++++++++++++++++++++++++++++++++++++/.#", "#`+++++++++++++++++++++++++++++++++++++++++++++`.#", "#.`+++++++++++++++++++++++++++++++++++++++++++++`#", "---+++++++++++++++++++++++++++++++++++++++++++++/#", "---++++++++++++++++++++++++++++++++++++++++++++/.#", "#./+++/`++/`++/`++/`++/`++/`++/`++/`++/`++/`+++`.#", "#.`/`/..`/..`/..`/..`/..`/..`/..`/..`/..`/..`/`/.#", "##################################################" }

  11. { "##########################", "..........................", "##########################" }

    Returns: {"##########################", "--------------------------", "##########################" }

  12. { "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#", "#.#" }

    Returns: {"#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#", "#|#" }

  13. { "###.#", "#/./#", "#`.`#", "#/./#", "#`.`#", "#/./#", "#`.`#", "#/./#", "#`.`#", "#/./#", "#`.`#", "#/./#", "#.###" }

    Returns: {"###|#", "#/-/#", "#`-`#", "#/-/#", "#`-`#", "#/-/#", "#`-`#", "#/-/#", "#`-`#", "#/-/#", "#`-`#", "#/-/#", "#|###" }

  14. { "##.########", "#.........#", "..`.`.....#", "#..`......#", "#.`.`.`...#", "#....`....#", "#...`.`.`.#", "#.........#", "#.....`./.#", "#.........#", "###########" }

    Returns: {"##|########", "#.|.......#", "--`-`.....#", "#.|`|.....#", "#.`-`-`...#", "#...|`|...#", "#...`-`-`.#", "#.....|.|.#", "#.....`-/.#", "#.........#", "###########" }

  15. { "##################################################", "...............................................`.#", "................................................`#", "#./...........................................`..#", "#/...........................................`...#", "#../........................................`....#", "#.../......................................./....#", "#................................................#", "#................................................#", "#................................................#", "#........../.....................................#", "#........................./......................#", "#................................................#", "#...................../..........................#", "#.......`........................................#", "#..................................`.............#", "#.................`..............................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#.............../................................#", "#..................................`.............#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#................................................#", "#...`......................................../...#", "#..`........................................../..#", "#`............................................../#", "#.`............................................/.#", "##################################################" }

    Returns: {"##################################################", "-----------------------------------------------`.#", "-----------------------------------------------+`#", "#./-------------------------------------------`||#", "#/+------------------------------------------`|||#", "#||/----------------------------------------`||||#", "#|||/---------------------------------------/||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||....../.................................||||#", "#||||...................../..................||||#", "#||||........................................||||#", "#||||................./......................||||#", "#||||...`....................................||||#", "#||||..............................`.........||||#", "#||||.............`..........................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||.........../............................||||#", "#||||..............................`.........||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#||||........................................||||#", "#|||`----------------------------------------/|||#", "#||`------------------------------------------/||#", "#`+--------------------------------------------+/#", "#.`--------------------------------------------/.#", "##################################################" }

  16. {"##.########", "#.........#", "..`.`.....#", "#..`......#", "#.`.`.`...#", "#....`....#", "#...`.`.`.#", "#.........#", "#.....`./.#", "#.........#", "###########" }

    Returns: {"##|########", "#.|.......#", "--`-`.....#", "#.|`|.....#", "#.`-`-`...#", "#...|`|...#", "#...`-`-`.#", "#.....|.|.#", "#.....`-/.#", "#.........#", "###########" }

  17. {"########.##", "#./......`#", "#../.`....#", "#.`...../.#", "#....`.../#", "###.#######" }

    Returns: {"########|##", "#./-----+`#", "#.|/-`..||#", "#.`+-+--/|#", "#..|.`---/#", "###|#######" }


This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
This problem was used for: