2012-03-01 36 views
8

我遇到了難題斜面在Ubuntu中。 我想通過試驗和錯誤等如何解決這個難題邏輯上沒有反覆試驗

邏輯,而不是解決這一難題的規則很簡單:

  1. 我們必須填寫所有的右側或左側傾斜的框。
  2. 接觸數字的斜線數量必須等於該數字。
  3. 電路板不允許有迴路。即斜面不能形成環。

困惑:

Question

自動解決的答案:

enter image description here

從哪裏開始?

+0

當然,您需要一定量的試驗和錯誤。你可以儘早排除一些選項,但我認爲沒有任何回溯就可以做到這一點。 – 2012-03-01 17:27:47

+1

@EAGER_STUDENT:我認爲你的意思是[這個遊戲](http://manpages.ubuntu.com/manpages/lucid/man6/slant.6.html)?你不能看看源代碼,看看他們如何解決它? – James 2012-03-01 17:31:29

+0

@AakashM是的,我可以在邏輯上解決簡單的網格。在簡單的網格中,角落處會有數字0或4或1。有了這個我將解決的工具。當寬度或高度增加時,問題是這三種情況在較難拼圖中不存在。 – 2012-03-01 17:36:59

回答

2

而不是左右傾斜,我會使用斜槓(/)和反斜槓(\)。

讓我們帶一個帶角(x1)(11)的正方形,其中x不等於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已經覆蓋了它。

這些規則不足以解決董事會。還有其他規則可能。但最終算法可能需要猜測。

+0

我不相信,在任何好的謎題中,算法都必須猜測(根據合理數量的經驗,從Simon Tatham的便攜式益智收集中挑選版本 - http://www.chiark.greenend.org.uk/~sgtatham/puzzles/java/slant.html),否則我同意。它的一切都是爲了找到給你提供信息的模式,然後再添加它,然後找到更多的模式。如果你正在猜測,那麼你還沒有足夠的模式。 :) – Chris 2012-03-02 10:58:20

+0

模式的數量可能非常大,以至於猜測比擁有千兆字節的大型數據庫要好。 – Dialecticus 2012-03-02 11:06:14

+0

你是對的,有時候只是測試失敗的路徑可能是最好的,但我的直覺/經驗表明,情況並非如此。自從我上次上場以來,它已經太久了,所以我不記得我腦海中所有使用和放下的規則。如果我不在工作,我會開始提醒自己。 ;-) – Chris 2012-03-02 11:15:25

2

「邏輯上」是一個非常廣泛的術語。正如Orbling在評論中提到的那樣,回溯可以被認爲是合乎邏輯的。人們也可以將「邏輯上」理解爲如何通過將其轉化爲邏輯公式來解決它。從我收集的評論中,您正試圖實現一個求解器,類似於一個常見的數獨解算器。

一個簡單的方法來實現一個求解器,類似於Sudokus的求解器,是找到某些模式。對於您提到的程序所產生的謎題,我可以合理地相信,這應該足以解決它們,而無需猜測和回溯。

一些明顯圖案的例子是<11>>33<。特別是2有一些很好的「傳遞」屬性。例如:<12...23 -> <12...23<(具有2 ... 2任意數量的2)。嘗試解決各種例子,當它陷入困境時,我相信你找到了一個可以教你另一種模式的例子。