迷宫由一组大小相等的正方形单元格组成,其中每一条边都可能是墙壁或门。迷宫可能没有出口,也可能有多个出口。单元格通常排列成使得它们可以与其他单元格共享边,如下图所示:
(上图中的单元格编号仅供说明使用。)
每个单元格的每一侧都标有导航方向:
对于每个迷宫,起点位于迷宫内的某个位置(例如,上述示例中任何带编号的单元格)。在上述示例中: 迷宫 A 没有出路。 迷宫 B 在单元格 2 的右侧有一个出口(解)。 迷宫 C 在单元格 3 的下方有一个出口,除非起点是单元格 5,在这种情况下没有出路。 迷宫 D 在单元格 6 的上方有一个出口。
例如,使用上面的迷宫 D,如果起点是单元格 9,到达出口的一种可能的方向序列为:right, right, right, right, right, up, up, up。
对于本题,你需要编写一个程序来寻找迷宫的出口。你的程序必须以交互方式运行。也就是说,你的程序通过提供一个方向(right, down, left 或 up)来进行移动,评测系统将返回以下四种响应之一:
1) wall – 表示那里有一堵墙,你不能向该方向移动。
2) ok – 表示那里有一扇门,你可以向该方向移动到相邻的单元格。
3) solved – 表示你已成功找到迷宫的出口。
4) <EOF> – 流上的文件结束符表示你的程序应该退出。需要明确的是,这不是字面字符串 <EOF>,而是当没有更多数据可读时,输入流提供的文件结束指示。
在每次 solved 响应之后,将生成一个新的迷宫,你的程序应该重新开始。此过程重复进行,直到你的程序收到 <EOF> 指示。
如果你的程序确定迷宫没有出路,你应该发送精确的字符串 no way out 而不是方向。如果确实没有出路,将生成一个新的迷宫,你的程序应该重新开始。
如果发生以下任何情况,你的程序将收到 <EOF> 指示:
1) 当评测程序确定你的解法正确时。这可能发生在运行过程中的任何时刻!
2) 即使有出路,你的程序也发送了 no way out。
3) 你的程序在同一个单元格中两次执行相同的移动(方向)。
输入格式
这是一个交互式程序。你接收到的输入是你所生成输出的函数。所有输入和输出字符串都必须以换行符结尾。你不应该发送额外的空行。
程序启动时必须做的第一件事是发送它的第一次移动(up, down, right 或 left),后跟一个换行符。然后它将等待标准输入上的换行符终止的响应。响应将是 wall、ok、solved 或 <EOF>(文件结束)指示之一。然后,你的程序将根据它收到的响应进行下一次移动,如上所述。此过程将重复进行,直到你的程序收到 <EOF> 指示。
样例
(用户输出为 粗体,计算机评测输出为 斜体。此样例运行与上述示例无关。)
样例 1
down *wall* right *wall* left *wall* up *ok* right *ok* down *ok* down *wall* right *wall* left *wall* up *ok* right *solved* right *ok* up *ok* up *ok* up *wall* right *solved* right *<EOF>*