我在 Ubuntu 中遇到了难题 slant。 我想从逻辑上解决这个难题,而不是通过反复试验等。
规则很简单:
- 我们必须用右倾斜或左倾斜填充所有框。
- 接触一个数的倾斜数必须等于该数。
- 电路板中不允许出现循环。即倾斜不能形成环。
谜题:
自动解决的答案:
我从哪里开始?
最佳答案
我将使用斜杠 (/) 和反斜杠 (\) 而不是左右倾斜。
让我们取一个角为 (x1)(11) 的正方形,其中 x 不等于 1。左上角有一个这样的正方形。假设那个正方形上的斜线是连接两个 1 的斜线。那些 1 被“用完”,所有接触它们的方 block 必须有不接触数字的线。但这会导致不可能的情况,因为我们的正方形左侧和下方都会有一条斜线,这意味着剩下的 1 会触及两个斜线。结论:如果您有一个包含三个 1 的正方形,那么该正方形中的线必须触及不为 1 的角。此规则可能不适用于边角,但如果角上有 1,则必须绘制与该角相接的线。
数字 1 和 3 是对称的,使用类似的逻辑我们得到另一个规则:如果您有一个包含三个 3 的正方形,那么该正方形中的线必须与这三个 3 中的两个相接触。
还有更多通用规则,但不适用于弯道。所讨论的正方形周围必须有正方形。让我们取两个相反的 1 (x1)(1y) 的正方形,其中 x 和 y 是任何值,包括无数。离左下角有一个这样的两个方格。假设那个正方形上的斜线是连接两个 1 的斜线。那些 1 被“用完”,所有接触它们的方 block 必须有不接触数字的线。但这会导致围绕 1 循环。结论:如果您有一个正方形,其中有两个相反的 1,那么该正方形中的线一定不能碰到这两个 1。此规则可能不适用于棋盘边缘。
数字1和数字3是对称的,但之前的规则采用“无环”规则,没有对称的“侧线无环”规则,因此不存在两个相反的3的规则。
现在您知道哪条线与 1 相接,您可以得出结论,没有其他线可以与它相接。我们可以将此推理归纳为以下填充规则:如果数字 x 与 x 条线相接,则所有其他相邻方 block 的线均不与该数字相接。并且对称地:如果数字 x 是 (4-x) 个正方形的角,其直线不与该数字接触,则所有其他相邻正方形必须具有与该数字接触的直线。
谷歌搜索术语“Gokigen Naname”,我发现了更多规则。一个是关于两个相邻的 1 (11),但 Mweerden 已经介绍过了。
这些规则不足以解决棋盘问题。可能还有其他规则。但最终算法可能不得不做出猜测。
关于algorithm - 如何在不反复试验的情况下逻辑地解决这个难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9520747/