我在Ubuntu中遇到了倾斜这个难题。 我想逻辑地解决这个难题,而不是通过反复试验等。
规则很简单:
益智:
自动解答:
我从哪里开始?
答案 0 :(得分:2)
“逻辑上”是一个非常广泛的术语。正如Orbling在评论中提到的那样,回溯可以被认为是合乎逻辑的。人们也可以理解为“逻辑上”,意思是如何通过将其翻译成逻辑公式来解决它。从我收集的评论中,你试图实现一个求解器,类似于一个普通的Sudoku求解器。
实现类似于Sudokus的求解器的一种简单方法是找到某些模式。对于你所提到的程序产生的谜题,我可以合理地确信这应该足以解决它们而不需要猜测和回溯。
明显模式的一些示例是<11>
和>33<
。特别是2有一些很好的“传递”属性。例如:<12...23 -> <12...23<
(2 ... 2任意数量的2s)。试试你的求解器的各种例子,当它被卡住时,我确定你找到了一个可以教你另一个模式的例子。
答案 1 :(得分:2)
而不是左右倾斜,我将使用斜杠(/)和反斜杠(\)。
让我们取一个带角(x1)(11)的正方形,其中x是除了1之外的任何一个。左上角有一个这样的正方形。假设该方块上的斜线是斜线,它连接两个1。那些1是“用完的”,触及它们的所有方块都必须有不接触数字的线条。但是这导致了不可能的情况,因为我们在广场的左下方都会有一个斜线,这意味着剩下的1触及两个斜面。结论:如果你有一个三个1的正方形,则该正方形的线必须接触不是1的角。此规则可能不适用于边角,但如果角落中有1,则必须绘制接触该角的线。
数字1和3是对称的,并且使用类似的逻辑我们得到另一个规则:如果你有一个三个3的正方形,则该正方形中的直线必须触及这三个3中的两个。
有更多一般规则,但它们不适用于角落。有问题的广场周围必须有正方形。让我们取两个相反的1(x1)(1y),其中x和y是任何东西,包括无数。离左下角有一个这样的两个方格。假设该方块上的斜线是斜线,它连接两个1。那些1是“用完的”,触及它们的所有方块都必须有不接触数字的线条。但这导致围绕1的循环。结论:如果你有一个有两个对立1的正方形,则该正方形中的直线不得触及那两个1的。此规则可能不适用于电路板边缘。
数字1和3是对称的,但先前的规则采用“无循环”规则,并且没有对称的“无循环线”规则,因此没有规则有两个相反的3。
现在您知道哪条线接触到1,您可以得出结论,没有其他线可以触及它。我们可以将此推理推广到以下填充规则:如果数字x正在触摸x行,则所有其他相邻正方形的行都不会触及数字。并且对称:如果数字x是(4-x)方块的角,其中的线条不接触数字,则所有其他相邻方格必须具有触及数字的线条。
搜索“ Gokigen Naname ”这个词,我找到了更多规则。一个是大约两个相邻的1(11),但Mweerden已经覆盖了它。
这些规则不足以解决董事会问题。可能还有其他规则。但最终算法可能不得不猜测。