看板 logic 關於我們 聯絡資訊
※ 引述《lljh90129 (海公公)》之銘言: : 在一條街上有5棟房子噴了5種顏色(紅黃綠藍白) : 各住著不同國籍的人 : 各喝不同飲料 : 抽不同品牌菸 : 養不同寵物 : 問題是: 誰養魚? : 提示: : 1.英國人住紅色的房子 這個問題我想了好幾天,用邏輯學的處理方式想,終於稍微掌握了一些要領. 簡單說是用邏輯演繹的方式把解題的結構建立出來. 以往大家所説的建表格方式,就是邏輯演譯吧! 只是在小小的紙上也許一次只推出一,二種情況. 邏輯的處理方式是從一組命題與敘述,將各種情況一步一步推出. 首先根據提示,可以確定小世界比較確定的基本情況是: B = { (Norwegian, Unknown, Unknown, Unknown, Unknown), (Unknown, Blue, Unknown, Unknown, Unknown), (Unknown, Unknown, Milk, Unknown, Unknown), (Unknown, Unknown, Unknown, Unknown, Unknown), (Unknown, Unknown, Unknown, Unknown, Unknown) } 然後是藉由一些推導規則,將提示未實現的情況加進去. 第一條說英國人住在紅色房子,所以規則是: B, Rule = {(1,Brit),(2,Red)}, apply_rule(B, Rule, B') -------------------------------------- B' Rule {(1,Brit),(2,Red)} 必須一起套在 B 的其中一組tuple上, 把Brit擺在第一位置,把Red擺在第二位置. 所以這樣會推出接下來的三種情況. 其他的情況,也寫程規則,用同樣的方式套上去. 例如,一條規則說抽Blend香煙的人家隔壁是養貓的,另一條規則說抽Blend香煙隔壁 的人家愛喝水,就把規則合併: B'', R1 = {(4,Blend),next,(5,cats),next,(3,water)}, R2 = {(3,water),next,(4,Blend),next,next,(5,cats)}, R3 = {(3,water),(5,cats),next,(4,Blend)}, R4 = {(4,Blend),next,(3,water),(5,cats)}, ( apply_rule(B'', R1, B''') | apply_rule(B'', R2, B''') | apply_rule(B'', R3, B''') | apply_rule(B'', R4, B''') ) ------------------------------------------------------ B''' 這樣可推出四種不同的情況,每一種情況必須讓一組規則一起套上. 每一組規則,例如 R1,又會製造出好幾種B''',總共產生的數量相當多. 但隨著規則越套越多, B's的情況數量會漸漸減少. 從我自己的程式中查出,最後找到養魚的人是German. 而我的程式,對左右邊的定義,全部是直接鄰接. 當然,在上述的規則推論之下,許多間接相鄰的情況都跑出來了. 所以多加了一些檢查條件,確定像綠色在白色左邊,抽Blends香煙的人鄰居有愛喝水的, 以及有貓. 最後只得到一種組合. 我參考的題目是英文題目,各種物件的編碼有些不同. http://www.coudal.com/thefish.php -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.110.5 ※ 編輯: yauhh 來自: 218.160.110.5 (10/29 01:57)