魔方吧·中文魔方俱乐部

标题: 从解答步骤还原关卡地图 [打印本页]

作者: skyivben    时间: 2011-7-10 13:56:33     标题: 从解答步骤还原关卡地图

我写了一个程序,可以从推箱子的解答步骤还原关卡地图。可以访问以下网页:Sokoban: Lurd to Xsb 在线使用该程序。




其算法可以参见我的博客:



作者: chzhy    时间: 2011-7-10 15:16:16

哈哈,楼主的程序和之前金优兄的程序有得一比,非常类似,试了一关,还原的地图和金优的那个一样。很好,我不懂程序,支持你!
作者: skyivben    时间: 2011-7-10 15:29:06

再来一幅图片:
作者: skyivben    时间: 2011-7-10 15:31:53     标题: 回复 2# 的帖子

谢谢您的支持。
如果您有什么意见和建议,请在这里提出,或者到博客园中我的博客中提出,以便我改进程序。谢谢!
作者: skyivben    时间: 2011-7-10 16:39:32

继续给出图片:
作者: anian    时间: 2011-7-10 23:30:15

感谢分享!      
作者: sokoban    时间: 2011-7-11 09:50:04

非常好的在线工具,添加到sokoban.ws的友情连接了
作者: skyivben    时间: 2011-7-13 09:57:12

非常感谢 anian 和 sokoban 朋友的支持!
作者: anian    时间: 2011-7-13 13:23:46

skyivben兄, 你的程序有个bug。 (和XhtXsb.exe有同样的bug)

请试试这个LURD: (这个LURD是我以前用来测试 LURD2XSB程序的)
UlLLUuuluLlDlldddrRRRRRRRRRRdrUllllllllllllulldRRRRRRRRRRRRRuRRlDllllllluuululldDDuulldddrRRRRRRRRRRdRRlUllllllluuulLulDDDuulldddrRRRRRRRRRRuRDllllllluuulluuurDDuullDDDDDuulldddrRRRRRRRRRRRRlllllllluuuLLulDDDuulldddrRRRRRRRRRRRldR


lurd2xsb_bug.png

附件: lurd2xsb_bug.png (2011-7-13 13:24:17, 40.57 KB) / 下载次数 69
http://bbs.mf8-china.com/forum.php?mod=attachment&aid=MTUwNTgzfDVkYzJhODI3fDE3MzIyNDQzMTB8MHww
作者: skyivben    时间: 2011-7-13 16:12:10

anina 兄您好,您给出的解法步骤中前六步是:UlLLUu。问题就出在第六步,因为第五步是“U”,表示推着箱子往上走一步,而第六步是“u”,表示不推箱子往上走一步,而这是不可能的,第五步中推着的箱子到哪里去了?我在“[url=http://www.cnblogs.com/skyivben/archive/2011/07/03/2096801.html]【算法】从推箱子的解答步骤还原关卡地图[/url]”这篇文章中“解法步骤不合法的情况”小节作了说明:


上面三幅关卡地图分别是从“LURD”、“Rrr”和“RL”解法步骤中还原出来的。对于这些不合法的解法步骤,本程序也不报错。本程序只保证合法的解法步骤能够还原出正确的关卡地图。此外,本程序还忽略解法步骤中“lurdLURD”以外的所有字符。

也就是说,我的程序对不合法的解法步骤并不报错(XhtXsb.exe应该也是这样),只保证合法的解法步骤能够还原出正确的关卡地图。
当然,如果大家认为对不合法的解法步骤需要报错的话,我也可以修改程序。
感谢您的指正。
作者: anian    时间: 2011-7-13 20:39:12

我认为报错比较好。  如果没有提示, 我们会以为还原关卡的答案就是我们提供的LURD。   但事实上是不可以过关的。
作者: rocwings    时间: 2011-7-14 14:23:12

显然不报错,问题很多啊。最简单的情况如下:
答案:UuU
关卡:
###
#.#
#$#
#.#
#$#
#@#
###

显然错了
作者: skyivben    时间: 2011-7-14 14:38:22

好吧,根据大家的意见,我将修改程序,使之在解法步骤不合法的情况给出相应的信息。
作者: skyivben    时间: 2011-7-15 22:51:33

已经修改程序,对不合法的解法步骤给出相应的提示:Invalid。如下所示:




作者: sokoban    时间: 2011-7-15 23:05:36

很喜欢用红色背景来辅助报错的设计,看上去很清楚。
作者: sokoban    时间: 2011-7-16 20:59:17

长为n的lurd串中有多少个是合法的?
在没有任何限制下,长为n的串的总数是8^n。
下面假设对一个合法的串,最后一步一定要是推,即最后一个字母只能是L,U,R,D之一。
若加上这个条件限制,长为n的串的总数为4 x 8^(n-1)

我曾经编程计算(就是对每个长为n的串都跑一遍还原关卡的算法)过比较小的n,合法的串的数目(没有详细反复验证,数字不一定对)

n          合法的串                        串的总数 4 x 8^(n-1)                           占的比例
1              4                                      4                                                          100%
2              24                                    32                                                     75%
3            156                                    256                                                 60.94%
4             912                                 2048                                                  44.53%
5            5536                               16384                                                  33.79%
6           31952                              13,1072                                              24.38%
7           187508                            104,8576                                            17.88%
8          1071696                           838,8608                                            12.78%
9           6168372                          6710,8864                                           9.19%
10        34972576                       5,3687,0912                                         6.51%

[ 本帖最后由 sokoban 于 2011-7-16 21:05 编辑 ]
作者: skyivben    时间: 2011-7-17 07:53:13     标题: 回复 16# 的帖子

这是一个很有趣的数学问题,而且好象也很难找到什么数学公式来计算所占的比例。
似乎也只有通过编程来计算了,那么当 n  很大时,计算所需的时间就会太长了,以致于无法完成计算。

作者: sokoban    时间: 2011-7-18 11:52:48     标题: 回复 17# 的帖子

我那破电脑算n=10就花了好几个小时。而且对 n=10 ,关卡可以说是无比平凡的,意义不大。




欢迎光临 魔方吧·中文魔方俱乐部 (http://bbs.mf8-china.com/) Powered by Discuz! X2