鲍勃被绑架,被困在迷宫中。您的工作是帮助他找到出路。但是由于这是一个非常黑暗和可怕的迷宫,他什么都看不到。他只有在碰到墙壁时才能感觉到墙壁,并且知道何时找到出口,但仅此而已。
由于他必须通过内存运行您的程序,因此它必须尽可能短。
注意:我从http://acmgnyr.org/year2016/problems.shtml中解决了这个问题,但略加修改,并亲自编写了法官程序/测试案例。
规格
- 这是一个交互式问题,因此您的程序将把输出输出到stdout,并接收来自stdin的响应。
- 招式您的程序可以输出一个
right
,left
,down
,up
。 - 然后它将获得以下之一作为输入:
wall
-这意味着鲍勃撞墙了。鲍勃将留在同一个地方。solved
-鲍勃找到了出口!您的程序现在也应该退出而不打印其他任何东西。ok
-鲍勃能够朝着给定的方向移动。
- 如果迷宫没有出口,那么您的程序应该输出,
no exit
以让Bob知道他应该放弃。然后,您的程序应退出而不打印其他任何内容。 - 由于Bob急于离开,因此您的程序不应做任何无关紧要的动作。换句话说,您的程序不允许从相同的正方形向相同的方向移动两次。
- 这是代码高尔夫球,所以最短的程序胜出!
例子
在以下示例中,S
是起始正方形,X
是出口,#
是墙,并且空格是有效正方形。由于没有一个正确的答案,因此这些只是解决方案的示例。还要注意,迷宫的图形就在那儿供您查看,您的程序不会将其作为输入。
########
#S #
###### #
# #
#X#
right
ok
right
ok
right
ok
right
ok
right
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
solved
#####
# S #
#####
right
ok
right
wall
down
wall
up
wall
left
ok
down
wall
up
wall
left
ok
down
wall
up
wall
left
wall
right
ok
no exit
solved
###############################
#S #
############## ### #
# #X# #
# #
##################
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
wall
left
ok
down
wall
up
ok
up
ok
left
ok
down
ok
down
ok
down
wall
left
ok
down
wall
up
ok
up
ok
left
ok
down
ok
down
ok
down
wall
left
ok
down
wall
up
ok
up
ok
left
wall
down
ok
left
wall
down
ok
left
ok
down
wall
up
wall
left
ok
down
wall
up
solved
检查程序
- 我已经用Python编写了一个解决方案检查器。您可以在https://gist.github.com/Maltysen/f0186019b3aa3812d812f8bb984fee19上找到它。
- 像这样运行它
python mazechecker.py ./mazesolver
。 - 它将在名为的文件夹中的所有迷宫中测试您的程序
mazes
。 - 迷宫位于与上面相同格式的单独文件中。
- 它会检查上面列出的所有条件,并在解决方案违反时通知您。
- 您可以使用来打印其他诊断信息
python mazechecker.py -d ./mazesolver
。 - 您可以在此处找到一个压缩
mazes
文件夹。您也可以根据需要添加自己的名称。
1
可能值得明确指出该问题是根据CC-BY-NA-SA许可发布的,因此您的混音也必须使用相同的许可。
—
肯尼迪
solved
输出时是否得到a no exit
?如果是这样,请在规则中说明,而不只是在测试用例中说明!
“ 不允许您的程序从相同的方格向同一方向移动两次。 ”关于此的两个问题:1.假设我处于位置
—
凯文·克鲁伊森
x,y
并走up
,响应wall
,然后right
再次响应wall
,我可以再试up
一次,还是因为我还没有搬离这个广场left
而down
仍然可以使用?
@KevinCruijssen我没有在回答中明确跟踪我来自哪里。相反,我会跟踪在每个正方形上处理过的所有方向,然后首先尝试未访问的正方形。当所有未访问的广场都经过尝试后,剩下的唯一合法举动就是我来自哪里(已经来过,但没有朝这个方向走)。
—
阿纳尔德