您是在两个城镇之间穿越沙漠的旅行者。您不能携带足够的水不停地穿越。这是经典拼图的变体。
规则
沙漠看起来像这样:一个WxH网格,其中大部分是空白空间。标S
有空格的地方是您开始的地方,E
是您要结束的地方,一个标有数字N的正方形容纳N单位水。标有.
保持零水的方块。
.....................................
........S............................
.....................................
.........7...........................
.....................................
.......................3.............
.....5...............................
................................2....
.....................................
.....................................
.....................................
...............................E.....
.....................................
....................7................
.....................................
.....................................
您以5单位水开始于S。
您最多可以携带5单位水。
每转你
- 向上,向下,向左或向右移动一个方块,
- 消耗1单位水,
- 拿起或放下一定数量的水。
这样会标出一个转弯:(direction)(+|-)(units of water)
,+
表示您正在拿水,-
正在放水。
示例变为:
D+0 Move Down
R+0 Move Right
D+2 Move Down, pick up two units of water.
U-1 Move Up, drop one unit of water.
如果在上面的示例中从S开始执行这些移动,则沙漠看起来像这样。
.....................................
........S............................
.........1...........................
.........5...........................
.....................................
.......................3.............
.....5...............................
................................2....
.....................................
.....................................
.....................................
...............................E.....
.....................................
....................7................
.....................................
.....................................
您只能拿起广场上已经没有的水。当您拿起水时,请从瓷砖的计数中减去该单位数量。
您只能拿起水最多容纳5个单位。
除了S可以容纳无限个单位外,任何瓷砖都不能容纳9个以上的单位。
您只能滴下当前所握的水量。
地面上的水保持不变,直到您再次将其捡起。
如果返回到S,则可以吸收任何数量的水而不消耗水。
如果达到E,那么您就赢了。如果您在E上消耗了最后一单位水,您仍然会赢。
转弯后,如果您的水量为零,而您不在E上,则您将死亡。
输入输出
您的程序将以STDIN
上述格式以ASCII艺术形式接收任意大小的起始图。您可以假设它是矩形,即所有线的长度相同,正好有一个S
和一个E
正方形,所有线都以终止\n
,并且整个STDIN都将符合此正则表达式:/^[SE1-9\.\n]+$/
您的程序会将以下输出写入STDOUT:
- 动作清单
- 地图的最终状态。
您可以以任何方便的格式输出动作列表。
地图的最终状态将在相同的格式输入要打印的不同之处在于它会另外给你穿越沙漠所走的路线通过标记所有访问过的瓷砖#
,如果瓷砖不含水,而不是S或E(即是.
)。
输入示例:
.....S.
.......
.......
E......
....8..
获胜示例:
D+0
D+0
D+0
D+0
L+5
L+0
L+0
L+0
L+0
U+0
.....S.
.....#.
.....#.
E....#.
####3#.
不平凡
发布代码时,请发布示例地图输入,您的代码将找到满足以下非平凡条件的解决方案:
- S和E至少相距10步。
- 最初包含N单位水的任何正方形都必须被N宽度的边界包围,其中所有正方形都位于其中
.
(没有水,没有S或E)
例
........2.
..........
..........
S.1..2....
..........
..........
........1.
..3.......
.........E
如果您增加任何瓷砖上的水量,以上内容将变得微不足道。
要求
大概您的程序在找到解决方案(如果有)之前会遇到许多失败的尝试。
- 您的程序最终必须解决任何可解决的输入。
- 我想看着你死掉 -您的程序将为每次寻找解决方案的失败尝试输出通往死亡之路的路线和最终地图。
- 如果遇到成功的解决方案,请打印该解决方案的完整输出并终止。
- 运行直到找到一个解决方案,但不要两次尝试相同的解决方案 -所有死亡应通过不同的途径进行。
- 使用它作为测试输入:
(至少需要一招才能在某个中点放水缓存)。
S........
.........
.........
........E
最短的代码与解决问题的非平凡的演示输入一起发布。