做了一个自动解谜的小程序
我蛮喜欢数织这游戏的,相对于数独还是简单些,不会太花脑,操作方式也比较友好,适合打发时光。大概半个月前,我就在想,既然我人能够解题,那能不能设计一个小程序让它自动解答数织谜题呢,我就试着动手去做。
我开始的思路是,像我自己解题一样,先基于每一行每一列的基本条件进行最初的判断,然后根据各种块长、位置等信息,分类判断推理后面的方块。结果忙活了半个月,一直到今天傍晚,代码写了700多行,还是没整出来,因为后面的判断越来越复杂,一行是只有一条还是有几条,边界是怎么把一行分割掉的,这一条应该在左边、中间还是右边的空?明明我一眼就能看出来的情形,要设计成代码,就变成了无尽的工作量。搞了这么久,也就只是在最初判断(因为都是现成信息)的基础上进了几步。
但今天晚上出门散步的时候,我突然意识到,电脑的最大优势是运算速度啊,我人为地把人工的条件判断放进去,试图让程序去理解局面,然后代替我做判断,其实是舍近求远啊,电脑该做的事情,就应该是罗列出所有可能性,然后去掉与已知不符的,再把剩下的可能叠加出来,把其中必然确定的块标记出来,然后多迭代几次,不就好了吗。
结果换了一个思路以后,我今晚又写了一次,核心算法代码只有50行,然后就完成了这个程序
真的是方向要选对,不然累死了自己也可能得不到想要的结果。不过话又说回来,如果不是一直去思考,也领悟不到这一点。