#117
For Science!
 

Difficulty:Hard
Topics:game


A mad scientist with tenure has created an experiment tracking mice in a maze. Several mazes have been randomly generated, and you've been tasked with writing a program to determine the mazes in which it's possible for the mouse to reach the cheesy endpoint. Write a function which accepts a maze in the form of a collection of rows, each row is a string where:
  • spaces represent areas where the mouse can walk freely
  • hashes (#) represent walls where the mouse can not walk
  • M represents the mouse's starting point
  • C represents the cheese which the mouse must reach
The mouse is not allowed to travel diagonally in the maze (only up/down/left/right), nor can he escape the edge of the maze. Your function must return true iff the maze is solvable by the mouse.
test not run
(= true  (__ ["M   C"]))
test not run
(= false (__ ["M # C"]))
test not run
(= true  (__ ["#######"
              "#     #"
              "#  #  #"
              "#M # C#"
              "#######"]))
test not run
(= false (__ ["########"
              "#M  #  #"
              "#   #  #"
              "# # #  #"
              "#   #  #"
              "#  #   #"
              "#  # # #"
              "#  #   #"
              "#  #  C#"
              "########"]))
test not run
(= false (__ ["M     "
              "      "
              "      "
              "      "
              "    ##"
              "    #C"]))
test not run
(= true  (__ ["C######"
              " #     "
              " #   # "
              " #   #M"
              "     # "]))
test not run
(= true  (__ ["C# # # #"
              "        "
              "# # # # "
              "        "
              " # # # #"
              "        "
              "# # # #M"]))


Code which fills in the blank: